From 49a2eee0cefed56651d98306a7477207260da574 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 7 Jun 2012 10:20:17 +0200 Subject: [PATCH] IDEA-87040 JavaDoc @link autocompletion is inconsistent with JavaDoc rendering when used on static fields --- .../impl/source/javadoc/PsiDocMethodOrFieldRef.java | 5 +++-- .../javadoc/FieldReferenceInInnerClassJavadoc.java | 10 ++++++++++ .../FieldReferenceInInnerClassJavadoc_after.java | 10 ++++++++++ .../codeInsight/completion/JavadocCompletionTest.java | 4 ++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java create mode 100644 java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.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 c42d906d94cd..a90e33c031cd 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 @@ -253,10 +253,11 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo @NotNull public PsiElement[] getVariants(){ final List vars = new ArrayList(); - final PsiElement scope = getScope(); - if (scope != null) { + PsiClass scope = getScope(); + while (scope != null) { ContainerUtil.addAll(vars, getAllMethods(scope, PsiDocMethodOrFieldRef.this)); ContainerUtil.addAll(vars, getAllVariables(scope, PsiDocMethodOrFieldRef.this)); + scope = scope.getContainingClass(); } return vars.toArray(new PsiModifierListOwner[vars.size()]); } diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java new file mode 100644 index 000000000000..07e48cec770b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc.java @@ -0,0 +1,10 @@ +public class TestClass { + + public static final int MY_CONSTANT = 0; + + /** + * {@link #MY + */ + public class Inner {} + +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.java new file mode 100644 index 000000000000..153dc0e51140 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/javadoc/FieldReferenceInInnerClassJavadoc_after.java @@ -0,0 +1,10 @@ +public class TestClass { + + public static final int MY_CONSTANT = 0; + + /** + * {@link #MY_CONSTANT + */ + public class Inner {} + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.java index b7fb373b9024..12ed03552923 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.java @@ -176,6 +176,10 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase { doTest(); } + public void testFieldReferenceInInnerClassJavadoc() throws Throwable { + doTest(); + } + public void testShortenClassReference() throws Throwable { doTest(); } public void testQualifiedClassReference() throws Throwable { configureByFile(getTestName(false) + ".java");