From bf48e89488c1bd2236d0216192ebeb1382dae95c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 11 Sep 2012 13:13:47 +0400 Subject: [PATCH] EA-39083 - assert: LazyParseableElement.ensureParsed --- .../execution/junit/TestClassFilter.java | 24 ++++++-- .../testng/model/TestClassFilter.java | 57 +++++++++++-------- .../testng/model/TestListenerFilter.java | 13 ++++- 3 files changed, 60 insertions(+), 34 deletions(-) diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java b/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java index dc24882b319e..84b5e3b91976 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java @@ -20,12 +20,15 @@ import com.intellij.compiler.CompilerConfiguration; import com.intellij.execution.configurations.ConfigurationUtil; import com.intellij.execution.testframework.SourceScope; import com.intellij.ide.util.ClassFilter; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtilBase; +import com.intellij.psi.util.PsiUtilCore; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -49,10 +52,14 @@ public class TestClassFilter implements ClassFilter.ClassFilterWithScope { public Project getProject() { return myProject; } public boolean isAccepted(final PsiClass aClass) { - return ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(aClass) && - (aClass.isInheritor(myBase, true) || JUnitUtil.isTestClass(aClass)) - && !CompilerConfiguration.getInstance(getProject()).isExcludedFromCompilation(PsiUtilBase.getVirtualFile(aClass)) - ; + return ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public Boolean compute() { + return ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(aClass) && + (aClass.isInheritor(myBase, true) || JUnitUtil.isTestClass(aClass)) + && !CompilerConfiguration.getInstance(getProject()).isExcludedFromCompilation(PsiUtilCore.getVirtualFile(aClass)); + } + }); } public TestClassFilter intersectionWith(final GlobalSearchScope scope) { @@ -78,9 +85,14 @@ public class TestClassFilter implements ClassFilter.ClassFilterWithScope { } return new TestClassFilter(testCase, sourceScope.getGlobalSearchScope()){ @Override - public boolean isAccepted(PsiClass aClass) { + public boolean isAccepted(final PsiClass aClass) { if (super.isAccepted(aClass)) { - final String qualifiedName = aClass.getQualifiedName(); + final String qualifiedName = ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public String compute() { + return aClass.getQualifiedName(); + } + }); for (Pattern compilePattern : compilePatterns) { if (compilePattern.matcher(qualifiedName).matches()) { return true; diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java index 981db9167a7d..2d99e6901f42 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestClassFilter.java @@ -18,7 +18,9 @@ package com.theoryinpractice.testng.model; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.execution.configurations.ConfigurationUtil; import com.intellij.ide.util.ClassFilter; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.search.GlobalSearchScope; @@ -60,35 +62,40 @@ public class TestClassFilter implements ClassFilter.ClassFilterWithScope return new TestClassFilter(this.scope.intersectWith(scope), project, includeConfig, checkClassCanBeInstantiated); } - public boolean isAccepted(PsiClass psiClass) { - if(!ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(psiClass)) return false; - //PsiManager manager = PsiManager.getInstance(project); - //if(manager.getEffectiveLanguageLevel().compareTo(LanguageLevel.JDK_1_5) < 0) return true; - boolean hasTest = TestNGUtil.hasTest(psiClass); - if (hasTest) { - if (checkClassCanBeInstantiated) { - final PsiMethod[] constructors = psiClass.getConstructors(); - if (constructors.length > 0) { - boolean canBeInstantiated = false; - for (PsiMethod constructor : constructors) { - if (constructor.getParameterList().getParametersCount() == 0) { - canBeInstantiated = true; - break; - } - if (AnnotationUtil.isAnnotated(constructor, Arrays.asList(GUICE_INJECTION, FACTORY_INJECTION), true)) { - canBeInstantiated = true; - break; + public boolean isAccepted(final PsiClass psiClass) { + return ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public Boolean compute() { + if(!ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(psiClass)) return false; + //PsiManager manager = PsiManager.getInstance(project); + //if(manager.getEffectiveLanguageLevel().compareTo(LanguageLevel.JDK_1_5) < 0) return true; + boolean hasTest = TestNGUtil.hasTest(psiClass); + if (hasTest) { + if (checkClassCanBeInstantiated) { + final PsiMethod[] constructors = psiClass.getConstructors(); + if (constructors.length > 0) { + boolean canBeInstantiated = false; + for (PsiMethod constructor : constructors) { + if (constructor.getParameterList().getParametersCount() == 0) { + canBeInstantiated = true; + break; + } + if (AnnotationUtil.isAnnotated(constructor, Arrays.asList(GUICE_INJECTION, FACTORY_INJECTION), true)) { + canBeInstantiated = true; + break; + } + } + if (!canBeInstantiated){ + return false; + } } } - if (!canBeInstantiated){ - return false; - } + return true; } - } - return true; - } - return includeConfig && TestNGUtil.hasConfig(psiClass); + return includeConfig && TestNGUtil.hasConfig(psiClass); + } + }); } public Project getProject() { diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestListenerFilter.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestListenerFilter.java index 278f1eec17d1..5507f2db7051 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestListenerFilter.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestListenerFilter.java @@ -17,7 +17,9 @@ package com.theoryinpractice.testng.model; import com.intellij.execution.configurations.ConfigurationUtil; import com.intellij.ide.util.ClassFilter; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; import com.theoryinpractice.testng.util.TestNGUtil; @@ -35,10 +37,15 @@ public class TestListenerFilter implements ClassFilter.ClassFilterWithScope this.project = project; } - public boolean isAccepted(PsiClass psiClass) { - if (!ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(psiClass)) return false; + public boolean isAccepted(final PsiClass psiClass) { + return ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public Boolean compute() { + if (!ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(psiClass)) return false; - return TestNGUtil.inheritsITestListener(psiClass); + return TestNGUtil.inheritsITestListener(psiClass); + } + }); } public Project getProject() {