From 07e1a720770dc99bfd537cd045f5705ede8563b9 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 1 Feb 2017 09:22:15 +0100 Subject: [PATCH] prefer lookup items with shorter tail text (e.g. List#add(element) without index) --- .../normalSorting/PreferListAddWithoutIndex.java | 5 +++++ .../com/intellij/codeInsight/ParameterInfoTest.java | 8 ++++---- .../completion/NormalCompletionOrderingTest.groovy | 6 ++++++ .../codeInsight/completion/NormalCompletionTest.groovy | 4 ++-- .../codeInsight/completion/CompletionLookupArranger.java | 3 ++- 5 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/PreferListAddWithoutIndex.java diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferListAddWithoutIndex.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferListAddWithoutIndex.java new file mode 100644 index 000000000000..db925ab4df5d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferListAddWithoutIndex.java @@ -0,0 +1,5 @@ +public class Usage { + void foo(java.util.List l){ + l.ad + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ParameterInfoTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/ParameterInfoTest.java index 480c1810787b..d16076f9b462 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/ParameterInfoTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ParameterInfoTest.java @@ -226,7 +226,7 @@ public class ParameterInfoTest extends LightCodeInsightFixtureTestCase { "void bar2(int a);" + "}"); LookupElement[] elements = myFixture.completeBasic(); - assertEquals("(int a)", LookupElementPresentation.renderElement(elements[1]).getTailText()); + assertEquals("(String a)", LookupElementPresentation.renderElement(elements[1]).getTailText()); myFixture.getLookup().setCurrentItem(elements[1]); myFixture.type('\n'); @@ -234,7 +234,7 @@ public class ParameterInfoTest extends LightCodeInsightFixtureTestCase { assertEquals("String a", parameterPresentation(1, -1)); assertEquals("int a", parameterPresentation(2, -1)); - checkHighlighted(2); + checkHighlighted(1); } public void testHighlightConstructorJustChosenInCompletion() { @@ -249,7 +249,7 @@ public class ParameterInfoTest extends LightCodeInsightFixtureTestCase { "class Bar2 {}"); myFixture.configureByText("a.java", "class Foo {{ new Bar }}"); LookupElement[] elements = myFixture.completeBasic(); - assertEquals("(String a) (default package)", LookupElementPresentation.renderElement(elements[2]).getTailText()); + assertEquals("(boolean a) (default package)", LookupElementPresentation.renderElement(elements[2]).getTailText()); myFixture.getLookup().setCurrentItem(elements[2]); myFixture.type('\n'); myFixture.checkResult("class Foo {{ new Bar() }}"); @@ -258,7 +258,7 @@ public class ParameterInfoTest extends LightCodeInsightFixtureTestCase { assertEquals("String a", parameterPresentation(1, -1)); assertEquals("int a", parameterPresentation(2, -1)); - checkHighlighted(1); + checkHighlighted(0); } private void checkHighlighted(int lineIndex) { 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 dc5f478917ea..d5f4804f3c01 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -767,4 +767,10 @@ class ContainerUtil extends ContainerUtilRt { assertPreferredItems 0, 'ContainerUtil', 'ConflictsUtil' } + void testPreferListAddWithoutIndex() { + checkPreferredItems 0, 'add', 'add', 'addAll', 'addAll' + assert LookupElementPresentation.renderElement(myFixture.lookupElements[1]).tailText.contains('int index') + assert LookupElementPresentation.renderElement(myFixture.lookupElements[3]).tailText.contains('int index') + } + } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 45c6df631011..ed7ba3981b51 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -144,12 +144,12 @@ class NormalCompletionTest extends LightFixtureCompletionTestCase { void testMethodItemPresentationGenerics() { configure() - LookupElementPresentation presentation = renderElement(myItems[0]) + LookupElementPresentation presentation = renderElement(myItems[1]) assert "add" == presentation.itemText assert "(int index, String element)" == presentation.tailText assert "void" == presentation.typeText - presentation = renderElement(myItems[1]) + presentation = renderElement(myItems[0]) assert "(String o)" == presentation.tailText assert "boolean" == presentation.typeText 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 9ab9d98d2c56..39087dc0a57a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java @@ -161,7 +161,8 @@ public class CompletionLookupArranger extends LookupArranger { public void addElement(LookupElement element, LookupElementPresentation presentation) { StatisticsWeigher.clearBaseStatisticsInfo(element); - final String invariant = presentation.getItemText() + "\0###" + getTailTextOrSpace(presentation) + "###" + presentation.getTypeText(); + String tail = getTailTextOrSpace(presentation); + String invariant = presentation.getItemText() + "\0###" + String.format("%02d", tail.length()) + tail + "###" + presentation.getTypeText(); element.putUserData(PRESENTATION_INVARIANT, invariant); element.putUserData(GLOBAL_PRESENTATION_INVARIANT, invariant);