autopopup completion in javadoc local reference (IDEA-131899)
authorpeter <peter@jetbrains.com>
Tue, 23 Dec 2014 17:18:34 +0000 (18:18 +0100)
committerpeter <peter@jetbrains.com>
Tue, 23 Dec 2014 17:25:17 +0000 (18:25 +0100)
java/java-impl/src/com/intellij/codeInsight/completion/JavadocCompletionConfidence.java
java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy

index b2c1bfa970bd695570c76409e5e5fd95a804f434..c1a0ead516e2062c671c72a61aecb7fd3c6a894d 100644 (file)
@@ -20,11 +20,14 @@ 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.javadoc.PsiDocTag;
-import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.ThreeState;
 import org.jetbrains.annotations.NotNull;
 
+import static com.intellij.patterns.PsiJavaPatterns.psiElement;
+import static com.intellij.patterns.StandardPatterns.or;
+
 /**
  * @author peter
  */
@@ -33,8 +36,9 @@ public class JavadocCompletionConfidence extends CompletionConfidence {
   @NotNull
   @Override
   public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) {
-    if (PsiTreeUtil.findElementOfClassAtOffset(psiFile, offset - 1, PsiDocTag.class, false) != null &&
-        PsiTreeUtil.findElementOfClassAtOffset(psiFile, offset - 1, PsiJavaCodeReferenceElement.class, false) != null) {
+    if (psiElement().inside(PsiDocTag.class).inside(
+      or(psiElement(PsiJavaCodeReferenceElement.class), psiElement(PsiDocMethodOrFieldRef.class)))
+      .accepts(contextElement)) {
       return ThreeState.NO;
     }
     if (PlatformPatterns.psiElement(JavaDocTokenType.DOC_TAG_NAME).accepts(contextElement)) {
index 3c077f1ca801b27d1d5446dae2460d0187c755a3..6be767a7248ef1f3f60f2b20e411aea4994dba4f 100644 (file)
@@ -259,6 +259,19 @@ class JavaAutoPopupTest extends CompletionAutoPopupTestCase {
     assert lookup
   }
 
+  public void "test popup in javadoc local reference"() {
+    myFixture.configureByText("a.java", """
+    /**
+    * {@link #<caret>}
+    */
+      class Foo {
+        void foo() {}
+      }
+    """)
+    type 'f'
+    assert lookup
+  }
+
   public void "test autopopup in javadoc tag name"() {
     myFixture.configureByText("a.java", """
     /**