From 71a058dc884c8db541cf3c728e37bde433a9fd4f Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 17 Feb 2017 16:45:09 +0100 Subject: [PATCH] try to search for annotations in module runtime scope (module with all transitive dependencies) as that would find all possible base classes for configured scope --- .../intellij/execution/ConfigurationUtil.java | 30 +++++++++---------- .../intellij/execution/junit/TestPackage.java | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java b/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java index 1b65c6c513f6..fe14f90124cf 100644 --- a/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java +++ b/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java @@ -22,6 +22,7 @@ import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.ReadActionProcessor; +import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Ref; @@ -39,7 +40,9 @@ import java.util.Set; public class ConfigurationUtil { // return true if there is JUnit4 test - public static boolean findAllTestClasses(final TestClassFilter testClassFilter, final Set found) { + public static boolean findAllTestClasses(final TestClassFilter testClassFilter, + @Nullable final Module module, + final Set found) { final PsiManager manager = testClassFilter.getPsiManager(); final Project project = manager.getProject(); @@ -79,30 +82,27 @@ public class ConfigurationUtil { } Set processed = ContainerUtil.newHashSet(); - boolean hasJunit4 = addAnnotatedMethodsAnSubclasses(manager, scope, testClassFilter, found, processed, JUnitUtil.TEST_ANNOTATION); - hasJunit4 |= addAnnotatedMethodsAnSubclasses(manager, scope, testClassFilter, found, processed, JUnitUtil.RUN_WITH); + boolean hasJunit4 = addAnnotatedMethodsAnSubclasses(scope, testClassFilter, module, found, processed, JUnitUtil.TEST_ANNOTATION, + manager.getProject()); + hasJunit4 |= addAnnotatedMethodsAnSubclasses(scope, testClassFilter, module, found, processed, JUnitUtil.RUN_WITH, manager.getProject()); return hasJunit4; } - private static boolean addAnnotatedMethodsAnSubclasses(final PsiManager manager, - final GlobalSearchScope scope, + private static boolean addAnnotatedMethodsAnSubclasses(final GlobalSearchScope scope, final TestClassFilter testClassFilter, + @Nullable final Module module, final Set found, final Set processed, - final String annotation) { + final String annotation, + final Project project) { final Ref isJUnit4 = new Ref<>(Boolean.FALSE); // annotated with @Test - final PsiClass testAnnotation = ApplicationManager.getApplication().runReadAction( - new Computable() { - @Nullable - public PsiClass compute() { - return JavaPsiFacade.getInstance(manager.getProject()).findClass(annotation, GlobalSearchScope.allScope(manager.getProject())); - } - } - ); + final PsiClass testAnnotation = ReadAction.compute(() -> JavaPsiFacade.getInstance(project).findClass(annotation, GlobalSearchScope.allScope(project))); if (testAnnotation != null) { //allScope is used to find all abstract test cases which probably have inheritors in the current 'scope' - ClassesWithAnnotatedMembersSearch.search(testAnnotation, GlobalSearchScope.allScope(manager.getProject())).forEach(annotated -> { + GlobalSearchScope allScope = module == null ? GlobalSearchScope.allScope(project) + : module.getModuleRuntimeScope(true); + ClassesWithAnnotatedMembersSearch.search(testAnnotation, allScope).forEach(annotated -> { AccessToken token = ReadAction.start(); try { if (!processed.add(annotated)) { // don't process the same class twice regardless of it being in the scope diff --git a/plugins/junit/src/com/intellij/execution/junit/TestPackage.java b/plugins/junit/src/com/intellij/execution/junit/TestPackage.java index 46c7e1f76c65..aa0d8c80e0bd 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestPackage.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestPackage.java @@ -67,7 +67,7 @@ public class TestPackage extends TestObject { try { final TestClassFilter classFilter = getClassFilter(data); LOG.assertTrue(classFilter.getBase() != null); - ConfigurationUtil.findAllTestClasses(classFilter, myClasses); + ConfigurationUtil.findAllTestClasses(classFilter, module, myClasses); } catch (CantRunException ignored) {} }