From 9ccfc30d744e6498599ecf45c911877cf4c43fe9 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 17 Jan 2017 09:20:16 +0100 Subject: [PATCH] remember completion method statistics per qualifier type (alas, undoing IDEA-87104) otherwise methods from base classes get preferred over more relevant ones example: Object methods like equals/getClass would be preselected when invoking a completion in a just created class, instead of its own methods --- .../JavaCompletionStatistician.java | 8 ++-- .../MethodStatisticsPerQualifierType.java | 8 ++++ ...StatsForDifferentQualifiersJComponent.java | 9 ----- ...SameStatsForDifferentQualifiersJLabel.java | 9 ----- .../NormalCompletionOrderingTest.groovy | 37 +++++-------------- 5 files changed, 21 insertions(+), 50 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/MethodStatisticsPerQualifierType.java delete mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java delete mode 100644 java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.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 218a1cae7e31..cb5385cf3220 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionStatistician.java @@ -48,8 +48,6 @@ public class JavaCompletionStatistician extends CompletionStatistician{ LookupItem item = element.as(LookupItem.CLASS_CONDITION_KEY); if (item == null) return null; - PsiType qualifierType = JavaCompletionUtil.getQualifierType(item); - if (o instanceof PsiMember) { final ExpectedTypeInfo[] infos = JavaCompletionUtil.EXPECTED_TYPES.getValue(location); final ExpectedTypeInfo firstInfo = infos != null && infos.length > 0 ? infos[0] : null; @@ -62,7 +60,9 @@ public class JavaCompletionStatistician extends CompletionStatistician{ PsiClass containingClass = ((PsiMember)o).getContainingClass(); if (containingClass != null) { String expectedName = firstInfo instanceof ExpectedTypeInfoImpl ? ((ExpectedTypeInfoImpl)firstInfo).getExpectedName() : null; - String contextPrefix = expectedName == null ? "" : "expectedName=" + expectedName + "###"; + PsiType qualifierType = JavaCompletionUtil.getQualifierType(item); + String contextPrefix = (qualifierType == null ? "" : JavaStatisticsManager.getMemberUseKey1(qualifierType) + "###") + + (expectedName == null ? "" : "expectedName=" + expectedName + "###"); if (o instanceof PsiMethod) { String memberValue = JavaStatisticsManager.getMemberUseKey2(RecursionWeigher.findDeepestSuper((PsiMethod)o)); @@ -73,8 +73,6 @@ public class JavaCompletionStatistician extends CompletionStatistician{ } } - if (qualifierType != null) return StatisticsInfo.EMPTY; - return null; } diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/MethodStatisticsPerQualifierType.java b/java/java-tests/testData/codeInsight/completion/normalSorting/MethodStatisticsPerQualifierType.java new file mode 100644 index 000000000000..673a270a1962 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normalSorting/MethodStatisticsPerQualifierType.java @@ -0,0 +1,8 @@ +public class Usage> { + void foo(T t) { + "". + } + + void someMethod() {} + +} diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java deleted file mode 100644 index 4f4dfa789336..000000000000 --- a/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJComponent.java +++ /dev/null @@ -1,9 +0,0 @@ -import javax.swing.*; - -public class MyFirstTestClassFoo { - - void foo(JComponent c) { - c.getComx - } - -} diff --git a/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.java b/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.java deleted file mode 100644 index defdba564584..000000000000 --- a/java/java-tests/testData/codeInsight/completion/normalSorting/SameStatsForDifferentQualifiersJLabel.java +++ /dev/null @@ -1,9 +0,0 @@ -import javax.swing.*; - -public class MyFirstTestClassFoo { - - void foo(JLabel l) { - l.getCompox - } - -} 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 469e1cf5882d..60df4104f36e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -23,7 +23,6 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation import com.intellij.codeInsight.lookup.impl.LookupImpl import com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor import com.intellij.ide.ui.UISettings -import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.psi.PsiClass import com.intellij.psi.PsiField import com.intellij.psi.PsiMethod @@ -172,32 +171,6 @@ class NormalCompletionOrderingTest extends CompletionSortingTestCase { assertPreferredItems(0, "FooBee", "FooBar") } - void testSameStatsForDifferentQualifiers() throws Throwable { - invokeCompletion("SameStatsForDifferentQualifiersJLabel.java") - assertPreferredItems(0, "getComponent") - incUseCount(getLookup(), myFixture.lookupElementStrings.indexOf('getComponents')) - FileDocumentManager.instance.saveAllDocuments() - - invokeCompletion("SameStatsForDifferentQualifiersJLabel.java") - assertPreferredItems(0, "getComponents", "getComponent") - - invokeCompletion("SameStatsForDifferentQualifiersJComponent.java") - assertPreferredItems(0, "getComponents", "getComponent") - } - - void testSameStatsForDifferentQualifiers2() throws Throwable { - invokeCompletion("SameStatsForDifferentQualifiersJComponent.java") - assertPreferredItems(0, "getComponent") - incUseCount(getLookup(), myFixture.lookupElementStrings.indexOf('getComponents')) - FileDocumentManager.instance.saveAllDocuments() - - invokeCompletion("SameStatsForDifferentQualifiersJComponent.java") - assertPreferredItems(0, "getComponents", "getComponent") - - invokeCompletion("SameStatsForDifferentQualifiersJLabel.java") - assertPreferredItems(0, "getComponents", "getComponent") - } - void testDispreferFinalize() throws Throwable { checkPreferredItems(0, "final", "finalize") } @@ -732,4 +705,14 @@ class ContainerUtil extends ContainerUtilRt { assert LookupElementPresentation.renderElement(myFixture.lookupElements[1]).tailText.contains('pack2') } + void testMethodStatisticsPerQualifierType() { + checkPreferredItems 0, 'charAt' + myFixture.type('eq\n);\n') + assert myFixture.editor.document.text.contains('equals();\n') + + myFixture.type('this.') + myFixture.completeBasic() + assertPreferredItems 0, 'someMethod' + } + }