diff --git a/src/main/java/de/espend/idea/php/annotation/inspection/AnnotationMissingUseInspection.java b/src/main/java/de/espend/idea/php/annotation/inspection/AnnotationMissingUseInspection.java index 38eedd42..c381252d 100644 --- a/src/main/java/de/espend/idea/php/annotation/inspection/AnnotationMissingUseInspection.java +++ b/src/main/java/de/espend/idea/php/annotation/inspection/AnnotationMissingUseInspection.java @@ -76,15 +76,7 @@ private void visitAnnotationDocTag(@NotNull PhpDocTag phpDocTag, @NotNull Proble ProblemHighlightType.GENERIC_ERROR_OR_WARNING, new ImportUseForAnnotationQuickFix(phpDocTag, collect) ); - - return; } - - holder.registerProblem( - firstChild, - MESSAGE, - ProblemHighlightType.GENERIC_ERROR_OR_WARNING - ); } @Override diff --git a/src/main/java/de/espend/idea/php/annotation/util/AnnotationUtil.java b/src/main/java/de/espend/idea/php/annotation/util/AnnotationUtil.java index d9d5bc05..407b8fd7 100644 --- a/src/main/java/de/espend/idea/php/annotation/util/AnnotationUtil.java +++ b/src/main/java/de/espend/idea/php/annotation/util/AnnotationUtil.java @@ -447,29 +447,35 @@ public static Map getPossibleImportClasses(@NotNull PhpDocTag ph Map phpClasses = new HashMap<>(); - for (PhpClass annotationClass: AnnotationUtil.getAnnotationsClasses(phpDocTag.getProject())) { - if (annotationClass.getName().equals(className)) { - phpClasses.put(annotationClass.getFQN(), null); + // "@Test\Bar" can be ignored here + // "@Bar" We only search for a direct class + if (!className.contains("\\")) { + for (PhpClass annotationClass: AnnotationUtil.getAnnotationsClasses(phpDocTag.getProject())) { + if (annotationClass.getName().equals(className)) { + phpClasses.put(annotationClass.getFQN(), null); + } } } - String[] split = className.split("\\\\"); - if (split.length > 1) { - String aliasStart = split[0]; - - for (UseAliasOption useAliasOption : AnnotationUtil.getActiveImportsAliasesFromSettings()) { - String alias = useAliasOption.getAlias(); + // "@ORM\Entity" is search for configured alias which can also provide a valid "use" path + if (!className.startsWith("\\")) { + String[] split = className.split("\\\\"); + if (split.length > 1) { + String aliasStart = split[0]; - if (!aliasStart.equals(alias)) { - continue; - } + for (UseAliasOption useAliasOption : AnnotationUtil.getActiveImportsAliasesFromSettings()) { + String alias = useAliasOption.getAlias(); + if (!aliasStart.equals(alias)) { + continue; + } - String clazz = useAliasOption.getClassName() + "\\" + StringUtils.join(Arrays.copyOfRange(split, 1, split.length), "\\"); - PhpClass phpClass = PhpElementsUtil.getClassInterface(phpDocTag.getProject(), clazz); + String clazz = useAliasOption.getClassName() + "\\" + StringUtils.join(Arrays.copyOfRange(split, 1, split.length), "\\"); + PhpClass phpClass = PhpElementsUtil.getClassInterface(phpDocTag.getProject(), clazz); - if (phpClass != null && isAnnotationClass(phpClass)) { - // user input for class name - phpClasses.put("\\" + StringUtils.stripStart(useAliasOption.getClassName(), "\\"), alias); + if (phpClass != null && isAnnotationClass(phpClass)) { + // user input for class name + phpClasses.put("\\" + StringUtils.stripStart(useAliasOption.getClassName(), "\\"), alias); + } } } } diff --git a/src/test/java/de/espend/idea/php/annotation/tests/inspection/AnnotationMissingUseInspectionTest.java b/src/test/java/de/espend/idea/php/annotation/tests/inspection/AnnotationMissingUseInspectionTest.java index a13fc13b..944c386f 100644 --- a/src/test/java/de/espend/idea/php/annotation/tests/inspection/AnnotationMissingUseInspectionTest.java +++ b/src/test/java/de/espend/idea/php/annotation/tests/inspection/AnnotationMissingUseInspectionTest.java @@ -30,13 +30,11 @@ public void testThatInspectionIsDisplayedForAnnotationClasses() { AnnotationMissingUseInspection.MESSAGE ); - assertLocalInspectionContains("test.php", "obar()\n" + + " * @Entity()\n" + " */\n" + "class Foo\n" + "{\n" + @@ -45,21 +43,25 @@ public void testThatInspectionIsDisplayedForAnnotationClasses() { ); assertLocalInspectionContainsNotContains("test.php", "ntity()\n" + + " * @\\Entity()\n" + " */\n" + "class Foo\n" + "{\n" + "}", AnnotationMissingUseInspection.MESSAGE ); + } + public void testThatInspectionIsNotDisplayedForClassesWhichDoesNotHaveAValidImportPath() { assertLocalInspectionContainsNotContains("test.php", "ntity()\n" + + " * @Entity()\n" + + " * @Foo()\n" + + " * @Foobar()\n" + " */\n" + "class Foo\n" + "{\n" + diff --git a/src/test/java/de/espend/idea/php/annotation/tests/util/AnnotationUtilTest.java b/src/test/java/de/espend/idea/php/annotation/tests/util/AnnotationUtilTest.java index 4e7e9e65..262daef8 100644 --- a/src/test/java/de/espend/idea/php/annotation/tests/util/AnnotationUtilTest.java +++ b/src/test/java/de/espend/idea/php/annotation/tests/util/AnnotationUtilTest.java @@ -231,6 +231,20 @@ public void testThatImportForClassIsSuggestedForAliasImportClass() { assertEquals("ORM", possibleImportClasses.get("\\Doctrine\\ORM\\Mapping")); } + public void testThatAlreadyFqnNameMustNotSuggestAnyImport() { + myFixture.copyFileToProject("doctrine.php"); + + PhpDocTag phpDocTag = PhpPsiElementFactory.createFromText(getProject(), PhpDocTag.class, " possibleImportClasses = AnnotationUtil.getPossibleImportClasses(phpDocTag); + assertEquals(0, possibleImportClasses.size()); + } + public void testAttributeVisitingForAnnotationClass() { myFixture.copyFileToProject("doctrine.php");