diff --git a/src/pl/projectspace/idea/plugins/php/atoum/actions/ClassLineMarkerProvider.java b/src/pl/projectspace/idea/plugins/php/atoum/actions/ClassLineMarkerProvider.java index cd94755..bf07dd7 100644 --- a/src/pl/projectspace/idea/plugins/php/atoum/actions/ClassLineMarkerProvider.java +++ b/src/pl/projectspace/idea/plugins/php/atoum/actions/ClassLineMarkerProvider.java @@ -37,23 +37,23 @@ public void collectSlowLineMarkers(@NotNull List psiElements, @NotNu } private void classNameMarker(PhpClass currentClass, Collection result, Project project) { - PhpClass target; + Collection target; String tooltip; if (Utils.isClassAtoumTest(currentClass)) { - target = Utils.locateTestedClass(project, currentClass); + target = Utils.locateTestedClasses(project, currentClass); tooltip = "Navigate to tested class"; } else { - target = Utils.locateTestClass(project, currentClass); + target = Utils.locateTestClasses(project, currentClass); tooltip = "Navigate to test"; } - if (target == null) { + if (target.size() == 0) { return; } NavigationGutterIconBuilder builder = NavigationGutterIconBuilder.create(Icons.ATOUM). - setTarget(target). + setTargets(target). setTooltipText(tooltip); result.add(builder.createLineMarkerInfo(currentClass)); } diff --git a/src/pl/projectspace/idea/plugins/php/atoum/actions/Utils.java b/src/pl/projectspace/idea/plugins/php/atoum/actions/Utils.java index f91ef29..0d301d3 100644 --- a/src/pl/projectspace/idea/plugins/php/atoum/actions/Utils.java +++ b/src/pl/projectspace/idea/plugins/php/atoum/actions/Utils.java @@ -9,6 +9,7 @@ import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -21,6 +22,16 @@ public static Boolean isClassAtoumTest(PhpClass checkedClass) @Nullable public static PhpClass locateTestClass(Project project, PhpClass testedClass) { + Collection possibleClasses = locateTestClasses(project, testedClass); + if (possibleClasses.size() > 0) { + return (PhpClass)possibleClasses.toArray()[0]; + } + + return null; + } + + @Nullable + public static Collection locateTestClasses(Project project, PhpClass testedClass) { String[] namespaceParts = testedClass.getNamespaceName().split("\\\\"); for(int i=namespaceParts.length; i>=1; i--){ @@ -28,27 +39,35 @@ public static PhpClass locateTestClass(Project project, PhpClass testedClass) { foo.add(i, getTestsNamespaceSuffix().substring(0, getTestsNamespaceSuffix().length() - 1)); String possibleClassname = StringUtils.join(foo, "\\") + "\\" + testedClass.getName(); - System.out.println(possibleClassname); - PhpClass possibleClass = locatePhpClass(project, possibleClassname); - if (null != possibleClass) { - return possibleClass; + Collection foundClasses = locatePhpClasses(project, possibleClassname); + if (foundClasses.size() > 0) { + return foundClasses; } } - return null; + return new ArrayList(); } @Nullable public static PhpClass locateTestedClass(Project project, PhpClass testClass) { + Collection possibleClasses = locateTestedClasses(project, testClass); + if (possibleClasses.size() > 0) { + return (PhpClass)possibleClasses.toArray()[0]; + } + + return null; + } + + @Nullable + public static Collection locateTestedClasses(Project project, PhpClass testClass) { String testClassNamespaceName = testClass.getNamespaceName(); String testedClassname = testClassNamespaceName.replace(getTestsNamespaceSuffix(), "") + testClass.getName(); - return locatePhpClass(project, testedClassname); - + return locatePhpClasses(project, testedClassname); } @Nullable protected static PhpClass locatePhpClass(Project project, String name) { - Collection phpClasses = PhpIndex.getInstance(project).getAnyByFQN(name); + Collection phpClasses = locatePhpClasses(project, name); if (phpClasses.size() != 1) { return null; } @@ -56,6 +75,11 @@ protected static PhpClass locatePhpClass(Project project, String name) { return (PhpClass)phpClasses.toArray()[0]; } + @Nullable + protected static Collection locatePhpClasses(Project project, String name) { + return PhpIndex.getInstance(project).getAnyByFQN(name); + } + private static String getTestsNamespaceSuffix() { return "tests\\units\\";