RUBY-5449 find class related tests and vise versa for appropriate element
authorDmitry.Krasilschikov <kradima@jetbrains.com>
Sat, 17 Dec 2016 17:14:57 +0000 (20:14 +0300)
committerDmitry.Krasilschikov <kradima@jetbrains.com>
Sat, 17 Dec 2016 17:16:16 +0000 (20:16 +0300)
platform/lang-api/src/com/intellij/testIntegration/TestFinder.java
platform/lang-impl/src/com/intellij/testIntegration/TestFinderHelper.java

index d956d465398e8b1bc41239cc47f3282dc88a0285..f62c477a5ab90f0c0095186847736ec3f632c83e 100644 (file)
@@ -35,4 +35,9 @@ public interface TestFinder {
   Collection<PsiElement> findClassesForTest(@NotNull PsiElement element);
 
   boolean isTest(@NotNull PsiElement element);
+
+  @Nullable
+  default PsiElement findSelectedElement(@NotNull final PsiElement element) {
+    return element;
+  }
 }
index 67318ceb1238b7d295346e6fcca47fcf2b7802b8..675cce74e8132f82e1f13ea1495cdfb203a861a9 100644 (file)
@@ -39,7 +39,8 @@ public class TestFinderHelper {
   public static Collection<PsiElement> findTestsForClass(PsiElement element) {
     Collection<PsiElement> result = new LinkedHashSet<>();
     for (TestFinder each : getFinders()) {
-      result.addAll(each.findTestsForClass(element));
+      final PsiElement selectedElement = each.findSelectedElement(element);
+      if (selectedElement != null) result.addAll(each.findTestsForClass(selectedElement));
     }
     return result;
   }
@@ -47,7 +48,8 @@ public class TestFinderHelper {
   public static Collection<PsiElement> findClassesForTest(PsiElement element) {
     Collection<PsiElement> result = new LinkedHashSet<>();
     for (TestFinder each : getFinders()) {
-      result.addAll(each.findClassesForTest(element));
+      final PsiElement selectedElement = each.findSelectedElement(element);
+      if (selectedElement != null) result.addAll(each.findClassesForTest(selectedElement));
     }
     return result;
   }