PreferMostUsedWeigher is moved down

This commit is contained in:
Dmitry Batkovich
2017-04-10 15:55:07 +03:00
parent e4f1994aee
commit 80548595d3
4 changed files with 55 additions and 10 deletions
@@ -72,18 +72,21 @@ public class JavaCompletionSorting {
sorter = sorter.weighAfter("priority", new PreferDefaultTypeWeigher(expectedTypes, parameters));
}
final PreferMostUsedWeigher preferMostUsedWeigher = PreferMostUsedWeigher.create(position);
List<LookupElementWeigher> afterStats = ContainerUtil.newArrayList();
afterStats.add(new PreferByKindWeigher(type, position, expectedTypes));
final PreferMostUsedWeigher preferMostUsedWeigher = PreferMostUsedWeigher.create(position);
if (preferMostUsedWeigher != null) {
afterStats.add(preferMostUsedWeigher);
}
if (!smart) {
ContainerUtil.addIfNotNull(afterStats, preferStatics(position, expectedTypes));
if (preferMostUsedWeigher == null) {
ContainerUtil.addIfNotNull(afterStats, preferStatics(position, expectedTypes));
}
if (!afterNew) {
afterStats.add(new PreferExpected(false, expectedTypes, position));
}
}
if (preferMostUsedWeigher != null) {
afterStats.add(preferMostUsedWeigher);
ContainerUtil.addIfNotNull(afterStats, preferStatics(position, expectedTypes));
}
ContainerUtil.addIfNotNull(afterStats, recursion(parameters, expectedTypes));
afterStats.add(new PreferSimilarlyEnding(expectedTypes));
if (ContainerUtil.or(expectedTypes, info -> !info.getType().equals(PsiType.VOID))) {
@@ -60,7 +60,7 @@ class PreferMostUsedWeigher extends LookupElementWeigher {
if (OBJECT_METHOD_PATTERN.accepts(psi)) {
return null;
}
if (looksLikeHelperMethod(psi)) {
if (looksLikeHelperMethodOrConst(psi)) {
return null;
}
final Integer occurrenceCount = myCompilerReferenceService.getCompileTimeOccurrenceCount(psi, myConstructorSuggestion);
@@ -69,7 +69,7 @@ class PreferMostUsedWeigher extends LookupElementWeigher {
}
//Objects.requireNonNull is an example
private static boolean looksLikeHelperMethod(@NotNull PsiElement element) {
private static boolean looksLikeHelperMethodOrConst(@NotNull PsiElement element) {
if (!(element instanceof PsiMethod)) return false;
PsiMethod method = (PsiMethod)element;
if (method.isConstructor()) return false;
@@ -78,11 +78,11 @@ class PreferMostUsedWeigher extends LookupElementWeigher {
if (parameters.length == 0) return false;
for (PsiParameter parameter : parameters) {
PsiType paramType = parameter.getType();
if (!isRawDeepTypeEqualToObject(paramType)) {
return false;
if (isRawDeepTypeEqualToObject(paramType)) {
return true;
}
}
return true;
return false;
}
private static boolean isRawDeepTypeEqualToObject(@Nullable PsiType type) {
@@ -0,0 +1,35 @@
class Foo {
public String someMethod1() {
return null;
}
public String someMethod2(String s) {
return null;
}
public Runnable someMethod3() {
return null;
}
void m() {
someMethod1();
someMethod1();
someMethod1();
someMethod2("");
someMethod2("");
someMethod2("");
someMethod2("");
someMethod3();
someMethod3();
someMethod3();
someMethod3();
someMethod3();
}
void mm(Foo f) {
<caret>
}
}
@@ -76,6 +76,13 @@ public class CompilerReferenceDataInCompletionTest extends CompilerReferencesTes
doTestStaticMemberCompletionOrdering(new String[] {"Foo.java"}, "someMethod2(1)", "someMethod1(0)", "m(0)", "nonNull(1)");
}
public void testExpectedByTypeAreFirst() {
doTestCompletion(new String[] {"Foo.java"}, "String s = ", new String[] {"someMethod2(1)", "someMethod1(0)", "someMethod3(0)", "m(0)", "mm(1)"}, m -> {
PsiClass aClass = m.getContainingClass();
return aClass != null && "Foo".equals(aClass.getName());
});
}
private void doTestConstructorCompletionOrdering(@NotNull String[] files,
@NotNull String phraseToComplete,
String... expectedOrder) {