IDEA-131899 Writing Javadoc does not automatically trigger hinting / auto-completion

autopopup in parameter names
This commit is contained in:
peter
2015-01-05 19:53:48 +01:00
parent e75687f90a
commit 5a5f2b7541
2 changed files with 31 additions and 10 deletions
@@ -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;
}
}
@@ -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 <caret>
*/
void foo2(Object oooooooo) {}
}
""")
type 'o'
assert lookup
}
public void testPrefixLengthDependentSorting() {
myFixture.addClass("package foo; public class PsiJavaCodeReferenceElement {}")