diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy index a6cb81097e7a..45f79b2ce770 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.groovy @@ -4,11 +4,13 @@ */ package com.intellij.codeInsight.completion import com.intellij.JavaTestUtil +import com.intellij.codeInsight.generation.OverrideImplementExploreUtil import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupManager import com.intellij.codeInsight.lookup.impl.LookupImpl import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ex.PathManagerEx +import com.intellij.openapi.extensions.LoadingOrder import com.intellij.openapi.module.StdModuleTypes import com.intellij.openapi.roots.ContentEntry import com.intellij.openapi.roots.ModifiableRootModel @@ -17,7 +19,9 @@ import com.intellij.openapi.roots.SourceFolder import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.JavaPsiFacade +import com.intellij.psi.PsiClass import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.util.PsiTreeUtil import com.intellij.testFramework.PsiTestUtil import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase /** @@ -85,8 +89,22 @@ public class HeavyNormalCompletionTest extends JavaCodeInsightFixtureTestCase { assertEquals("AxBxCxDxEx", myItems[1].getLookupString()); assertEquals("AyByCyDyEy", myItems[0].getLookupString()); } + + static class CacheVerifyingContributor extends CompletionContributor { + @Override + void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) { + PsiClass psiClass = PsiTreeUtil.getParentOfType(parameters.position, PsiClass) + for (ci in OverrideImplementExploreUtil.getMethodsToOverrideImplement(psiClass, true)) { + assert ci.element.valid + } + for (ci in OverrideImplementExploreUtil.getMethodsToOverrideImplement(psiClass, false)) { + assert ci.element.valid + } + } + } public void testMapsInvalidation() throws Exception { + JavaAutoPopupTest.registerCompletionContributor(CacheVerifyingContributor, testRootDisposable, LoadingOrder.FIRST) myFixture.configureByFile("/codeInsight/completion/normal/" + getTestName(false) + ".java"); assertInstanceOf(myFixture.getFile().getVirtualFile().getFileSystem(), LocalFileSystem.class); // otherwise the completion copy won't be preserved which is critical here myFixture.completeBasic(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 9b1ec4f25cd5..052442f9a61e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -46,6 +46,7 @@ import com.intellij.openapi.extensions.LoadingOrder import com.intellij.openapi.fileEditor.FileEditor import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.util.Disposer import com.intellij.psi.PsiFile import com.intellij.psi.PsiJavaFile import com.intellij.psi.statistics.StatisticsManager @@ -576,10 +577,13 @@ public interface Test { } private def registerContributor(final Class contributor, LoadingOrder order = LoadingOrder.LAST) { + registerCompletionContributor(contributor, testRootDisposable, order) + } + static def registerCompletionContributor(final Class contributor, Disposable parentDisposable, LoadingOrder order) { def ep = Extensions.rootArea.getExtensionPoint("com.intellij.completion.contributor") def bean = new CompletionContributorEP(language: 'JAVA', implementationClass: contributor.name) ep.registerExtension(bean, order) - disposeOnTearDown({ ep.unregisterExtension(bean) } as Disposable) + Disposer.register(parentDisposable, { ep.unregisterExtension(bean) } as Disposable) } public void testLeftRightMovements() {