mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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
This commit is contained in:
+3
-5
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
public class Usage<T extends Usage<T>> {
|
||||
void foo(T t) {
|
||||
"".<caret>
|
||||
}
|
||||
|
||||
void someMethod() {}
|
||||
|
||||
}
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
import javax.swing.*;
|
||||
|
||||
public class MyFirstTestClassFoo {
|
||||
|
||||
void foo(JComponent c) {
|
||||
c.getCom<caret>x
|
||||
}
|
||||
|
||||
}
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
import javax.swing.*;
|
||||
|
||||
public class MyFirstTestClassFoo {
|
||||
|
||||
void foo(JLabel l) {
|
||||
l.getCompo<caret>x
|
||||
}
|
||||
|
||||
}
|
||||
+10
-27
@@ -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'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user