IDEA-139340 Inner class appears twice in code completion popup

This commit is contained in:
peter
2015-05-18 16:59:35 +02:00
parent d27b4997b9
commit 1bd313a730
3 changed files with 25 additions and 4 deletions

View File

@@ -50,8 +50,16 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
result.restartCompletionWhenNothingMatches();
}
InheritorsHolder holder = new InheritorsHolder(parameters.getPosition(), result);
for (CompletionResult plainResult : plainResults) {
Object o = plainResult.getLookupElement().getObject();
if (o instanceof PsiClass) {
holder.registerClass((PsiClass)o);
}
}
if (empty) {
delegate(parameters, JavaCompletionSorting.addJavaSorting(parameters, result));
delegate(parameters, JavaCompletionSorting.addJavaSorting(parameters, result), holder);
} else if (Registry.is("ide.completion.show.better.matching.classes")) {
if (parameters.getCompletionType() == CompletionType.BASIC &&
parameters.getInvocationCount() <= 1 &&
@@ -59,7 +67,6 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
JavaCompletionContributor.isClassNamePossible(parameters) &&
!JavaSmartCompletionContributor.AFTER_NEW.accepts(parameters.getPosition())) {
result = result.withPrefixMatcher(new BetterPrefixMatcher(result.getPrefixMatcher(), BetterPrefixMatcher.getBestMatchingDegree(plainResults)));
InheritorsHolder holder = new InheritorsHolder(parameters.getPosition(), result);
for (CompletionResult plainResult : plainResults) {
LookupElement element = plainResult.getLookupElement();
if (element instanceof TypeArgumentCompletionProvider.TypeArgsLookupElement) {
@@ -86,7 +93,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
return true;
}
private static void delegate(CompletionParameters parameters, final CompletionResultSet result) {
private static void delegate(CompletionParameters parameters, final CompletionResultSet result, final InheritorsHolder inheritorsHolder) {
if (parameters.getCompletionType() == CompletionType.BASIC) {
PsiElement position = parameters.getPosition();
suggestCollectionUtilities(parameters, result, position);
@@ -94,7 +101,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
if (parameters.getInvocationCount() <= 1 &&
(JavaCompletionContributor.mayStartClassName(result) || suggestMetaAnnotations(parameters)) &&
JavaCompletionContributor.isClassNamePossible(parameters)) {
suggestNonImportedClasses(parameters, result, null);
suggestNonImportedClasses(parameters, result, inheritorsHolder);
return;
}

View File

@@ -0,0 +1,8 @@
class Foo {
public static void main(String[] args) {
Inne<caret>x
}
private static final class Inner { }
}

View File

@@ -1269,6 +1269,12 @@ class XInternalError {}
assert LookupElementPresentation.renderElement(items[0]).tailText == ' (java.lang)'
}
public void testDuplicateInnerClass() {
configure()
def items = myFixture.lookupElements.findAll { it.lookupString == 'Inner' }
assert items.size() == 1
}
public void testSameSignature() {
configure()
myFixture.assertPreferredCompletionItems(0, 's', 's, file', 's, file, a')