diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferExpectedTypeConstantOverClass.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferExpectedTypeConstantOverClass.java new file mode 100644 index 000000000000..18684b0da89f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferExpectedTypeConstantOverClass.java @@ -0,0 +1,11 @@ +class SomeClass { + void foo(Point p) { + p.smth(JSON); + } +} + +interface Point { + int FOO = 2; + int JSON = 3; + void smth(int x); +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferExpectedTypeConstantOverSameNamedClass.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferExpectedTypeConstantOverSameNamedClass.java new file mode 100644 index 000000000000..18684b0da89f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferExpectedTypeConstantOverSameNamedClass.java @@ -0,0 +1,11 @@ +class SomeClass { + void foo(Point p) { + p.smth(JSON); + } +} + +interface Point { + int FOO = 2; + int JSON = 3; + void smth(int x); +} \ 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 bd355f51c8c1..0b49e6240790 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -776,4 +776,9 @@ class ContainerUtil extends ContainerUtilRt { assert LookupElementPresentation.renderElement(myFixture.lookupElements[3]).tailText.contains('int index') } + void testPreferExpectedTypeConstantOverSameNamedClass() { + myFixture.addClass("package another; public class JSON {}") + checkPreferredItems 0, 'Point.JSON', 'JSON' + } + } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java index bbffcef9e807..46b9d49100dc 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java @@ -19,7 +19,6 @@ package com.intellij.codeInsight.lookup; import com.intellij.codeInsight.completion.PrefixMatcher; import com.intellij.codeInsight.completion.impl.CompletionServiceImpl; import com.intellij.codeInsight.lookup.impl.LookupImpl; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.hash.EqualityPolicy; @@ -146,15 +145,11 @@ public abstract class LookupArranger implements WeighingContext { protected boolean isPrefixItem(LookupElement item, final boolean exactly) { final String pattern = itemPattern(item); - if (Comparing.strEqual(pattern, item.getLookupString(), item.isCaseSensitive())) { - return true; - } + for (String s : item.getAllLookupStrings()) { + if (!s.equalsIgnoreCase(pattern)) continue; - if (!exactly) { - for (String s : item.getAllLookupStrings()) { - if (s.equalsIgnoreCase(pattern)) { - return true; - } + if (!item.isCaseSensitive() || !exactly || s.equals(pattern)) { + return true; } } return false;