From 44917ca45f210bb263c5b9fc1f08c2293dd6afa1 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 7 Feb 2013 19:17:02 +0100 Subject: [PATCH] IDEA-100367 package-info.java should specify the full package names for @link --- .../psi/impl/source/PsiJavaCodeReferenceElementImpl.java | 7 +++++++ .../javadoc/QualifyClassReferenceInPackageStatement.java | 8 ++++++++ .../QualifyClassReferenceInPackageStatement_after.java | 8 ++++++++ .../codeInsight/completion/JavadocCompletionTest.java | 6 ++++++ 4 files changed, 29 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement.java create mode 100644 java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement_after.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java index f449956ed035..100529c55577 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java @@ -36,12 +36,14 @@ import com.intellij.psi.impl.source.resolve.ResolveCache; import com.intellij.psi.impl.source.resolve.VariableResolverProcessor; import com.intellij.psi.impl.source.tree.*; import com.intellij.psi.infos.CandidateInfo; +import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.scope.ElementClassFilter; import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.scope.processor.FilterScopeProcessor; import com.intellij.psi.scope.util.PsiScopesUtil; import com.intellij.psi.tree.ChildRoleBase; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; @@ -158,6 +160,11 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme i == JavaDocElementType.DOC_INLINE_TAG || i == JavaDocElementType.DOC_REFERENCE_HOLDER || i == JavaDocElementType.DOC_TYPE_HOLDER) { + PsiDocComment docComment = PsiTreeUtil.getParentOfType(this, PsiDocComment.class); + if (docComment != null && docComment.getOwner() == null && docComment.getParent() instanceof PsiJavaFile) { + return CLASS_FQ_OR_PACKAGE_NAME_KIND; + } + return CLASS_OR_PACKAGE_NAME_KIND; } if (isCodeFragmentType(i)) { diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement.java b/java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement.java new file mode 100644 index 000000000000..e92cc86cc8eb --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement.java @@ -0,0 +1,8 @@ +/** + * @see XHell + */ +package foo.bar; + +class XHello { + +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement_after.java b/java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement_after.java new file mode 100644 index 000000000000..8cbb31c1688f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/javadoc/QualifyClassReferenceInPackageStatement_after.java @@ -0,0 +1,8 @@ +/** + * @see foo.bar.XHello + */ +package foo.bar; + +class XHello { + +} \ 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 3f704281dc90..3c17cc882e85 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.java @@ -198,6 +198,12 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase { assertTrue(getLookupElementStrings().containsAll(Arrays.asList("io", "lang", "util"))); } + public void testQualifyClassReferenceInPackageStatement() throws Exception { + configureByFile(getTestName(false) + ".java"); + myFixture.type('\n'); + checkResultByFile(getTestName(false) + "_after.java"); + } + public void testCustomReferenceProvider() throws Exception { PsiReferenceRegistrarImpl registrar = (PsiReferenceRegistrarImpl) ReferenceProvidersRegistry.getInstance().getRegistrar(StdLanguages.JAVA);