diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavadocCompletionConfidence.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavadocCompletionConfidence.java index c1a0ead516e2..6d6bd29f01c7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavadocCompletionConfidence.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavadocCompletionConfidence.java @@ -16,17 +16,14 @@ package com.intellij.codeInsight.completion; import com.intellij.patterns.PlatformPatterns; -import com.intellij.psi.JavaDocTokenType; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiJavaCodeReferenceElement; -import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import static com.intellij.patterns.PsiJavaPatterns.psiElement; -import static com.intellij.patterns.StandardPatterns.or; /** * @author peter @@ -36,9 +33,7 @@ public class JavadocCompletionConfidence extends CompletionConfidence { @NotNull @Override public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { - if (psiElement().inside(PsiDocTag.class).inside( - or(psiElement(PsiJavaCodeReferenceElement.class), psiElement(PsiDocMethodOrFieldRef.class))) - .accepts(contextElement)) { + if (psiElement().inside(PsiDocTag.class).accepts(contextElement) && findJavaReference(psiFile, offset - 1) != null) { return ThreeState.NO; } if (PlatformPatterns.psiElement(JavaDocTokenType.DOC_TAG_NAME).accepts(contextElement)) { @@ -46,4 +41,18 @@ public class JavadocCompletionConfidence extends CompletionConfidence { } return super.shouldSkipAutopopup(contextElement, psiFile, offset); } + + @Nullable + private static PsiJavaReference findJavaReference(final PsiFile file, final int offset) { + PsiReference reference = file.findReferenceAt(offset); + if (reference instanceof PsiMultiReference) { + for (final PsiReference psiReference : ((PsiMultiReference)reference).getReferences()) { + if (psiReference instanceof PsiJavaReference) { + return (PsiJavaReference)psiReference; + } + } + } + return reference instanceof PsiJavaReference ? (PsiJavaReference)reference : null; + } + } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 6be767a7248e..e617bca540ec 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -247,7 +247,6 @@ class JavaAutoPopupTest extends CompletionAutoPopupTestCase { """ } - public void "test popup in javadoc reference"() { myFixture.configureByText("a.java", """ /** @@ -300,6 +299,19 @@ class Foo { type 'o' assert !lookup } + + public void "test autopopup in javadoc parameter name"() { + myFixture.configureByText("a.java", """ +class Foo { + /** + * @param + */ + void foo2(Object oooooooo) {} +} + """) + type 'o' + assert lookup + } public void testPrefixLengthDependentSorting() { myFixture.addClass("package foo; public class PsiJavaCodeReferenceElement {}")