From 25643b9c899daad718eb86f0ecc097e0ef5c4a4c Mon Sep 17 00:00:00 2001 From: Artemiy Sartakov Date: Wed, 16 Jan 2019 12:45:09 +0700 Subject: [PATCH] PsiDocMethodOrFieldRef: fixed javadoc resolve for references without param types (IDEA-205390) --- .../source/javadoc/PsiDocMethodOrFieldRef.java | 16 +++++++--------- .../javaDoc/LinkToMethodNoParams.java | 7 +++++++ .../daemon/JavadocHighlightingTest.java | 1 + 3 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkToMethodNoParams.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java index 2a6216497d2e..f1d34c56b4b5 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java @@ -96,7 +96,7 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo } } - final PsiType[] parameterTypes; + final MethodSignature methodSignature; if (signature != null) { final List types = ContainerUtil.newArrayListWithCapacity(signature.length); final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(element.getProject()); @@ -108,16 +108,14 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo types.add(PsiType.NULL); } } - parameterTypes = types.toArray(PsiType.createArray(types.size())); + methodSignature = MethodSignatureUtil.createMethodSignature(name, types.toArray(PsiType.createArray(types.size())), + PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY, + name.equals(scope.getName())); } else { - parameterTypes = PsiType.EMPTY_ARRAY; + methodSignature = null; } - final MethodSignature methodSignature = MethodSignatureUtil.createMethodSignature(name, parameterTypes, - PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY, - name.equals(scope.getName())); - PsiMethod method = findMethod(methodSignature, name, getAllMethods(scope, this)); if (method != null) { @@ -205,10 +203,10 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo } @Nullable - public static PsiMethod findMethod(@NotNull MethodSignature methodSignature, @Nullable String name, @NotNull PsiMethod[] allMethods) { + public static PsiMethod findMethod(@Nullable MethodSignature methodSignature, @Nullable String name, @NotNull PsiMethod[] allMethods) { for (PsiMethod method : allMethods) { if (method.getName().equals(name) && - MethodSignatureUtil.areSignaturesErasureEqual(methodSignature, method.getSignature(PsiSubstitutor.EMPTY))) { + (methodSignature == null || MethodSignatureUtil.areSignaturesErasureEqual(methodSignature, method.getSignature(PsiSubstitutor.EMPTY)))) { return method; } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkToMethodNoParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkToMethodNoParams.java new file mode 100644 index 000000000000..8c4f8e1f5b59 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/LinkToMethodNoParams.java @@ -0,0 +1,7 @@ +/** + * {@link #foo} + */ +class Foo { + void foo(Foo p1, Foo p2) { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHighlightingTest.java index 146d06f17689..98cd0e69cf16 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavadocHighlightingTest.java @@ -66,6 +66,7 @@ public class JavadocHighlightingTest extends LightDaemonAnalyzerTestCase { public void testSee5() { doTest(); } public void testSee6() { doTest(); } public void testLinkToItself() { doTest(); } + public void testLinkToMethodNoParams() { doTest(); } public void testSeeConstants() { doTest(); } public void testSeeNonRefs() { doTest(); } public void testReturn0() { doTest(); }