don't suggest duplicate class variants in java class references on second completion (IDEA-91913)

This commit is contained in:
peter
2012-09-24 17:37:12 +04:00
parent 6b5682c0f6
commit c9054ad8a1
3 changed files with 34 additions and 10 deletions
@@ -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();
@@ -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) {
+1 -1
View File
@@ -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"/>