From 2eb0332443d18ff50e137fb826486dc6fc330753 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 28 Nov 2013 17:32:22 +0100 Subject: [PATCH] let test AST loading filters be more robust to test failures --- .../com/intellij/psi/impl/JavaPsiFacadeEx.java | 3 ++- .../com/intellij/psi/impl/JavaPsiFacadeImpl.java | 5 +++-- .../com/intellij/psi/ClsRepositoryUseTest.java | 4 +--- .../com/intellij/psi/ModifyAnnotationsTest.java | 4 ++-- .../com/intellij/psi/Src15RepositoryUseTest.java | 6 +++--- .../com/intellij/psi/SrcRepositoryUseTest.java | 4 ++-- .../daemon/DaemonAnalyzerTestCase.java | 6 +----- .../daemon/LightDaemonAnalyzerTestCase.java | 6 ++---- .../src/com/intellij/psi/impl/PsiManagerImpl.java | 8 +++++++- .../fixtures/impl/CodeInsightTestFixtureImpl.java | 15 +++++---------- .../fixtures/PyMultiFileResolveTestCase.java | 15 +++++---------- .../intellij/util/xml/stubs/DomStubUsingTest.java | 9 ++------- 12 files changed, 35 insertions(+), 50 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeEx.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeEx.java index 365581938b98..3501a5c15064 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeEx.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeEx.java @@ -19,6 +19,7 @@ */ package com.intellij.psi.impl; +import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFileFilter; import com.intellij.psi.JavaPsiFacade; @@ -41,5 +42,5 @@ public abstract class JavaPsiFacadeEx extends JavaPsiFacade { } @TestOnly - public abstract void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter); + public abstract void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter, Disposable parentDisposable); } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java index 07f275817a7c..782d82f46f97 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java @@ -15,6 +15,7 @@ */ package com.intellij.psi.impl; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ReadActionProcessor; import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.DumbAware; @@ -467,7 +468,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { @TestOnly @Override - public void setAssertOnFileLoadingFilter(@NotNull final VirtualFileFilter filter) { - ((PsiManagerImpl)PsiManager.getInstance(myProject)).setAssertOnFileLoadingFilter(filter); + public void setAssertOnFileLoadingFilter(@NotNull final VirtualFileFilter filter, Disposable parentDisposable) { + ((PsiManagerImpl)PsiManager.getInstance(myProject)).setAssertOnFileLoadingFilter(filter, parentDisposable); } } diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java index ea6614e41d0f..504838c9c437 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java @@ -232,13 +232,11 @@ public class ClsRepositoryUseTest extends PsiTestCase { } public void testFindClass() { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable); PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); assertNotNull(aClass); checkValid(aClass); - - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); } public void testIsInterface() { diff --git a/java/java-tests/testSrc/com/intellij/psi/ModifyAnnotationsTest.java b/java/java-tests/testSrc/com/intellij/psi/ModifyAnnotationsTest.java index 54712d6b5b49..e4f8b59403ab 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ModifyAnnotationsTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ModifyAnnotationsTest.java @@ -40,7 +40,7 @@ public class ModifyAnnotationsTest extends PsiTestCase { public void testReplaceAnnotation() throws Exception { //be sure not to load tree - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable); PsiClass aClass = myJavaFacade.findClass("Test", GlobalSearchScope.allScope(myProject)); assertNotNull(aClass); final PsiAnnotation[] annotations = aClass.getModifierList().getAnnotations(); @@ -48,7 +48,7 @@ public class ModifyAnnotationsTest extends PsiTestCase { assertEquals("A", annotations[0].getNameReferenceElement().getReferenceName()); final PsiAnnotation newAnnotation = myJavaFacade.getElementFactory().createAnnotationFromText("@B", null); //here the tree is going to be loaded - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable); CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { @Override public void run() { diff --git a/java/java-tests/testSrc/com/intellij/psi/Src15RepositoryUseTest.java b/java/java-tests/testSrc/com/intellij/psi/Src15RepositoryUseTest.java index 7424659f0afd..be6000658221 100644 --- a/java/java-tests/testSrc/com/intellij/psi/Src15RepositoryUseTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/Src15RepositoryUseTest.java @@ -299,7 +299,7 @@ public class Src15RepositoryUseTest extends PsiTestCase { public boolean accept(final VirtualFile file) { return !"package-info.java".equals(file.getName()); } - }); + }, myTestRootDisposable); final PsiClass annotationTypeClass = findClass("annotations.AnnotationType"); assertTrue(annotationTypeClass.isAnnotationType()); @@ -321,11 +321,11 @@ public class Src15RepositoryUseTest extends PsiTestCase { } private void setupLoadingFilter() { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable); } private void tearDownLoadingFilter() { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable); } @NotNull diff --git a/java/java-tests/testSrc/com/intellij/psi/SrcRepositoryUseTest.java b/java/java-tests/testSrc/com/intellij/psi/SrcRepositoryUseTest.java index 8400116eb98d..5ef9f2408e90 100644 --- a/java/java-tests/testSrc/com/intellij/psi/SrcRepositoryUseTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/SrcRepositoryUseTest.java @@ -584,11 +584,11 @@ public class SrcRepositoryUseTest extends PsiTestCase{ } private void teardownLoadingFilter() { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable); } private void setupLoadingFilter() { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable); } public void testAnonymousClass2() throws Exception { diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java index f4d4c149545b..49a5232bdeb8 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java @@ -320,15 +320,11 @@ public abstract class DaemonAnalyzerTestCase extends CodeInsightTestCase { } final JavaPsiFacadeEx facade = getJavaFacade(); if (facade != null) { - facade.setAssertOnFileLoadingFilter(myFileTreeAccessFilter); // check repository work + facade.setAssertOnFileLoadingFilter(myFileTreeAccessFilter, myTestRootDisposable); // check repository work } Collection infos = doHighlighting(); - if (facade != null) { - facade.setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); - } - String text = myEditor.getDocument().getText(); data.checkLineMarkers(DaemonCodeAnalyzerImpl.getLineMarkers(getDocument(getFile()), getProject()), text); data.checkResult(infos, text); diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java index 46702b88f654..3609c86192e8 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java @@ -105,7 +105,7 @@ public abstract class LightDaemonAnalyzerTestCase extends LightCodeInsightTestCa } protected void doTestConfiguredFile(boolean checkWarnings, boolean checkWeakWarnings, boolean checkInfos, @Nullable String filePath) { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); + getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE, myTestRootDisposable); ExpectedHighlightingData data = new ExpectedHighlightingData(getEditor().getDocument(), checkWarnings, checkWeakWarnings, checkInfos); checkHighlighting(data, composeLocalPath(filePath)); @@ -122,12 +122,10 @@ public abstract class LightDaemonAnalyzerTestCase extends LightCodeInsightTestCa PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); getFile().getText(); //to load text myJavaFilesFilter.allowTreeAccessForFile(getVFile()); - getJavaFacade().setAssertOnFileLoadingFilter(myJavaFilesFilter); // check repository work + getJavaFacade().setAssertOnFileLoadingFilter(myJavaFilesFilter, myTestRootDisposable); // check repository work Collection infos = doHighlighting(); - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); - data.checkResult(infos, getEditor().getDocument().getText(), filePath); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/PsiManagerImpl.java index 107f0526f8ee..09a046c04729 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiManagerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiManagerImpl.java @@ -143,9 +143,15 @@ public class PsiManagerImpl extends PsiManagerEx { } @TestOnly - public void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter) { + public void setAssertOnFileLoadingFilter(@NotNull VirtualFileFilter filter, Disposable parentDisposable) { // Find something to ensure there's no changed files waiting to be processed in repository indices. myAssertOnFileLoadingFilter = filter; + Disposer.register(parentDisposable, new Disposable() { + @Override + public void dispose() { + myAssertOnFileLoadingFilter = VirtualFileFilter.NONE; + } + }); } @Override diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 23ae57fd5bcf..7fe494ed3713 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -1437,17 +1437,12 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig List infos; final long start = System.currentTimeMillis(); - try { - ((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(myJavaFilesFilter); + ((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(myJavaFilesFilter, myTestRootDisposable); -// ProfilingUtil.startCPUProfiling(); - infos = doHighlighting(); - removeDuplicatedRangesForInjected(infos); -// ProfilingUtil.captureCPUSnapshot("testing"); - } - finally { - ((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); - } + // ProfilingUtil.startCPUProfiling(); + infos = doHighlighting(); + removeDuplicatedRangesForInjected(infos); + // ProfilingUtil.captureCPUSnapshot("testing"); final long elapsed = System.currentTimeMillis() - start; data.checkResult(infos, file.getText()); diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java index 431bf2832abe..36e68f5086c6 100644 --- a/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java +++ b/python/testSrc/com/jetbrains/python/fixtures/PyMultiFileResolveTestCase.java @@ -44,17 +44,12 @@ public abstract class PyMultiFileResolveTestCase extends PyResolveTestCase { FileType fileType = file.getFileType(); return fileType == PythonFileType.INSTANCE; } - }); - try { - final ResolveResult[] resolveResults = ref.multiResolve(false); - if (resolveResults.length == 0) { - return null; - } - return resolveResults[0].isValidResult() ? resolveResults[0].getElement() : null; - } - finally { - psiManager.setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); + }, myTestRootDisposable); + final ResolveResult[] resolveResults = ref.multiResolve(false); + if (resolveResults.length == 0) { + return null; } + return resolveResults[0].isValidResult() ? resolveResults[0].getElement() : null; } diff --git a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubUsingTest.java b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubUsingTest.java index 92afd1cff478..085960fcb45b 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubUsingTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubUsingTest.java @@ -114,12 +114,7 @@ public class DomStubUsingTest extends DomStubTest { public void testFileLoading() throws Exception { XmlFile file = prepareFile("foo.xml"); - ((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.ALL); - try { - DomManager.getDomManager(getProject()).getFileElement(file, Foo.class); - } - finally { - ((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); - } + ((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable); + DomManager.getDomManager(getProject()).getFileElement(file, Foo.class); } }