From bd4212a585f48999d75dc6c129ac4fa79abb3da8 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 7 Dec 2012 16:16:19 +0100 Subject: [PATCH] use the deepest super method for completion statistics --- .../completion/JavaCompletionStatistician.java | 7 ++++++- .../completion/RecursionWeigher.java | 2 +- .../normalSorting/DeepestSuperMethodStats.java | 18 ++++++++++++++++++ .../NormalCompletionOrderingTest.groovy | 13 +++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java index 11e2afdebf5f..c389f27c332a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java @@ -29,7 +29,7 @@ public class JavaCompletionStatistician extends CompletionStatistician{ @Override public StatisticsInfo serialize(final LookupElement element, final CompletionLocation location) { - final Object o = element.getObject(); + Object o = element.getObject(); if (o instanceof PsiLocalVariable || o instanceof PsiParameter || o instanceof PsiThisExpression) { return StatisticsInfo.EMPTY; @@ -47,6 +47,11 @@ public class JavaCompletionStatistician extends CompletionStatistician{ PsiType expectedType = infos != null && infos.length > 0 ? infos[0].getDefaultType() : null; return new StatisticsInfo(JavaStatisticsManager.getAfterNewKey(expectedType), key2); } + + if (o instanceof PsiMethod) { + o = RecursionWeigher.findDeepestSuper((PsiMethod)o); + } + PsiClass containingClass = ((PsiMember)o).getContainingClass(); if (containingClass != null) { if (CommonClassNames.JAVA_LANG_OBJECT.equals(containingClass.getQualifiedName())) { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java b/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java index 59df2bb447e6..847dbd29b233 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java @@ -197,7 +197,7 @@ class RecursionWeigher extends LookupElementWeigher { } @NotNull - private static PsiMethod findDeepestSuper(@NotNull final PsiMethod method) { + public static PsiMethod findDeepestSuper(@NotNull final PsiMethod method) { final PsiMethod first = DeepestSuperMethodsSearch.search(method).findFirst(); return first == null ? method : first; } diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java b/java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java new file mode 100644 index 000000000000..d42b7ea4f6a7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/DeepestSuperMethodStats.java @@ -0,0 +1,18 @@ +class AbstractSet { + public void addX() {} + public void addY() {} +} + +class MySet1 extends AbstractSet { + public void addX() {} +} +class MySet2 extends AbstractSet { + public void addX() {} +} + +class Foo { + + void foo(MySet1 set1, MySet2 set2) { + set1.ad + } +} \ 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 f9c4ea38f01c..5f20a20825ce 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -510,6 +510,19 @@ import java.lang.annotation.Target; assertPreferredItems 0, 'contains', 'containsAll' } + public void testDeepestSuperMethodStats() { + invokeCompletion(getTestName(false) + ".java") + assertPreferredItems 0, 'addX', 'addY' + myFixture.type('y\n;set1.ad') + + myFixture.completeBasic() + assertPreferredItems 0, 'addY', 'addX' + myFixture.type('x\n;set2.ad') + + myFixture.completeBasic() + assertPreferredItems 0, 'addX', 'addY' + } + public void testCommonPrefixMoreImportantThanKind() { CodeInsightSettings.getInstance().COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE; checkPreferredItems(0, 'PsiElement', 'psiElement')