diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassOverItsStaticMembers.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassOverItsStaticMembers.java new file mode 100644 index 000000000000..07334c2f5293 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassOverItsStaticMembers.java @@ -0,0 +1,16 @@ +enum Zoo { + A,B,C,D,E,F,G,H +} + +class Zaa {} +class Zab {} +class Zac {} +class Zad {} +class Zae {} + +class Bar { + + { + Zoo z = Z + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.java index 7da3343c047e..00b090ea5054 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.java @@ -205,4 +205,8 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase { checkPreferredItems(0, "foo", "boo", "doo", "hashCode"); } + public void testPreferClassOverItsStaticMembers() { + checkPreferredItems(0, "Zoo"); + } + } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/PrefixMatchingWeigher.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/PrefixMatchingWeigher.java index 67745e671af4..292c84b3f6f4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/PrefixMatchingWeigher.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/PrefixMatchingWeigher.java @@ -19,6 +19,8 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; +import java.util.Set; + /** * @author peter */ @@ -31,14 +33,21 @@ public class PrefixMatchingWeigher extends CompletionWeigher { return 0; } - final String lookupString = item.getLookupString(); final String prefixHumps = StringUtil.capitalsOnly(prefix); - final String itemHumps = StringUtil.capitalsOnly(lookupString); + final Set strings = item.getAllLookupStrings(); + + for (String lookupString : strings) { + if (StringUtil.capitalsOnly(lookupString).startsWith(prefixHumps)) return 100; + } + + for (String lookupString : strings) { + if (lookupString.startsWith(prefix)) return 5; + } + for (String lookupString : strings) { + if (StringUtil.startsWithIgnoreCase(lookupString, prefix)) return 1; + } - if (itemHumps.startsWith(prefixHumps)) return 100;// - itemHumps.length(); - if (lookupString.startsWith(prefix)) return 5; - if (StringUtil.startsWithIgnoreCase(lookupString, prefix)) return 1; return 0; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java index 537162f6c2d6..088fcf277be6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java @@ -93,7 +93,11 @@ class LiftShorterItemsClassifier extends Classifier { for (LookupElement shorterElement : myElements.get(prefix)) { if (srcSet.contains(shorterElement) && processed.add(shorterElement)) { lifted.add(shorterElement); - group.add(shorterElement); + if (group.isEmpty()) { + result.add(Collections.singletonList(shorterElement)); + } else { + group.add(shorterElement); + } } } }