From 3cba0cb6070ab60ba310cfc524f9394b5e013596 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 20 Jun 2012 18:09:26 +0200 Subject: [PATCH] prefer class to its members --- .../codeInsight/completion/JavaCompletionSorting.java | 8 +++++++- .../normalSorting/PreferClassToItsConstants.java | 8 ++++++++ .../completion/NormalCompletionOrderingTest.groovy | 4 ++++ .../completion/impl/LiftShorterItemsClassifier.java | 11 +++++++---- 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java index 2aabcdd1c2d8..68d0d1a47424 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java @@ -94,13 +94,19 @@ public class JavaCompletionSorting { } Object object = shorterElement.getObject(); if (object instanceof PsiClass) { - PsiFile file = ((PsiClass)object).getContainingFile(); + PsiClass psiClass = (PsiClass)object; + PsiFile file = psiClass.getContainingFile(); if (file != null) { VirtualFile vFile = file.getOriginalFile().getVirtualFile(); if (vFile != null && fileIndex.isInSource(vFile)) { return true; } } + Object longerObject = longerElement.getObject(); + if (longerObject instanceof PsiMember && + psiClass.getManager().areElementsEquivalent(psiClass, ((PsiMember)longerObject).getContainingClass())) { + return true; + } } return false; } diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java new file mode 100644 index 000000000000..75ee87ce6fac --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/PreferClassToItsConstants.java @@ -0,0 +1,8 @@ +import java.util.Calendar; + +class Util { + void foo() { + Calendar.getInstance().get(Calex) + } + +} \ 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 dd88c5f92066..3c54a40b6813 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -366,4 +366,8 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase { assertPreferredItems 0, 'get', 'getClass' } + public void testPreferClassToItsConstants() { + checkPreferredItems 0, 'Calendar', 'Calendar.FIELD_COUNT' + } + } 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 65391ce8e046..65649e6b82e6 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 @@ -98,14 +98,17 @@ public class LiftShorterItemsClassifier extends Classifier { for (String prefix : prefixes) { List shorter = new SmartList(); for (LookupElement shorterElement : myElements.get(prefix)) { - if (srcSet.contains(shorterElement) && myCondition.shouldLift(shorterElement, element, context) && processed.add(shorterElement)) { + if (srcSet.contains(shorterElement) && + myCondition.shouldLift(shorterElement, element, context) && + processed.add(shorterElement)) { shorter.add(shorterElement); } } - lifted.addAll(shorter); - - ContainerUtil.addAll(result, myNext.classify(shorter, context)); + if (!shorter.isEmpty()) { + lifted.addAll(shorter); + ContainerUtil.addAll(result, myNext.classify(shorter, context)); + } } result.add(element); }