mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't suggest duplicate class variants in java class references on second completion (IDEA-91913)
This commit is contained in:
+11
-7
@@ -54,16 +54,20 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
public void fillCompletionVariants(CompletionParameters parameters, final CompletionResultSet _result) {
|
||||
if (parameters.getCompletionType() == CompletionType.CLASS_NAME ||
|
||||
parameters.isExtendedCompletion() && mayContainClassName(parameters)) {
|
||||
CompletionResultSet result = _result.withPrefixMatcher(CompletionUtil.findReferenceOrAlphanumericPrefix(parameters));
|
||||
addAllClasses(parameters, parameters.getInvocationCount() <= 1, result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
_result.addElement(element);
|
||||
}
|
||||
});
|
||||
addAllClasses(parameters, _result);
|
||||
}
|
||||
}
|
||||
|
||||
static void addAllClasses(CompletionParameters parameters, final CompletionResultSet _result) {
|
||||
CompletionResultSet result = _result.withPrefixMatcher(CompletionUtil.findReferenceOrAlphanumericPrefix(parameters));
|
||||
addAllClasses(parameters, parameters.getInvocationCount() <= 1, result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
_result.addElement(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static boolean mayContainClassName(CompletionParameters parameters) {
|
||||
PsiElement position = parameters.getPosition();
|
||||
PsiFile file = position.getContainingFile();
|
||||
|
||||
+22
-2
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference;
|
||||
@@ -34,10 +35,29 @@ public class JavaClassReferenceCompletionContributor extends CompletionContribut
|
||||
final PsiReference last = references[references.length - 1];
|
||||
context.setReplacementOffset(last.getRangeInElement().getEndOffset() + last.getElement().getTextRange().getStartOffset());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) {
|
||||
PsiElement position = parameters.getPosition();
|
||||
JavaClassReference reference = findJavaClassReference(position.getContainingFile(), parameters.getOffset());
|
||||
if (reference == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (parameters.getCompletionType() == CompletionType.CLASS_NAME || parameters.isExtendedCompletion()) {
|
||||
JavaClassNameCompletionContributor.addAllClasses(parameters, result);
|
||||
}
|
||||
else {
|
||||
CompletionData data = CompletionUtil.getCompletionDataByElement(position, parameters.getOriginalFile());
|
||||
if (data != null) {
|
||||
LegacyCompletionContributor.completeReference(parameters, result, data);
|
||||
}
|
||||
}
|
||||
result.stopHere();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static JavaClassReference findJavaClassReference(final PsiFile file, final int offset) {
|
||||
PsiReference reference = file.findReferenceAt(offset);
|
||||
if (reference instanceof PsiMultiReference) {
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
<completion.contributor language="JAVA" implementationClass="com.intellij.codeInsight.completion.JavaCompletionContributor" id="javaLegacy"
|
||||
order="last, before legacy, before default, before javaClassName"/>
|
||||
<completion.contributor language="any" implementationClass="com.intellij.codeInsight.completion.JavaClassReferenceCompletionContributor"
|
||||
id="javaClassReference"/>
|
||||
id="javaClassReference" order="before legacy"/>
|
||||
|
||||
<completion.contributor language="any" implementationClass="com.intellij.codeInsight.completion.JavaMethodMergingContributor" id="methodMerger"
|
||||
order="before javaLegacy, before default"/>
|
||||
|
||||
Reference in New Issue
Block a user