From 85903981fcf8e46cc05e23a0ccd92c78f8e4983c Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 27 Aug 2012 16:15:42 +0200 Subject: [PATCH] IDEA-90349 Auto-completion should always prefer exact match --- .../completion/normalSorting/PreferFieldToMethod.java | 6 ++++++ .../completion/NormalCompletionOrderingTest.groovy | 7 +++++++ .../codeInsight/completion/CompletionLookupArranger.java | 8 +++++++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java new file mode 100644 index 000000000000..7d00592ebea4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferFieldToMethod.java @@ -0,0 +1,6 @@ +public class Foo { + private int size; + + public int size() { return size; } + + public boolean isEmpty() { return size \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy index 31348ed15cf4..22e5a39ef44e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -12,6 +12,7 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation import com.intellij.codeInsight.lookup.impl.LookupImpl import com.intellij.ide.ui.UISettings import com.intellij.psi.PsiClass +import com.intellij.psi.PsiField import com.intellij.psi.PsiMethod import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.psi.statistics.StatisticsManager @@ -446,4 +447,10 @@ import java.lang.annotation.Target; assertPreferredItems(0, '_goo2', '_goo1') } + public void testPreferFieldToMethod() { + checkPreferredItems(0, 'size', 'size') + assert lookup.items[0].object instanceof PsiField + assert lookup.items[1].object instanceof PsiMethod + } + } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java index dd650b75161a..de37b32b9a23 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java @@ -144,10 +144,16 @@ public class CompletionLookupArranger extends LookupArranger { } classifier.addElement(element); - final String invariant = presentation.getItemText() + "###" + presentation.getTailText() + "###" + presentation.getTypeText(); + final String invariant = presentation.getItemText() + "###" + getTailTextOrSpace(presentation) + "###" + presentation.getTypeText(); element.putUserData(PRESENTATION_INVARIANT, invariant); } + @NotNull + private static String getTailTextOrSpace(LookupElementPresentation presentation) { + String tailText = presentation.getTailText(); + return tailText == null || tailText.isEmpty() ? " " : tailText; + } + private static List sortByPresentation(Iterable source) { ArrayList result = ContainerUtil.newArrayList(source); ContainerUtil.sort(result, new Comparator() {