IDEA-203204 Import-class popup suggests java.util.List as the last item

This commit is contained in:
peter
2018-11-30 14:58:01 +01:00
parent f60612c4f2
commit 8a152c9a6d
2 changed files with 29 additions and 13 deletions
@@ -217,20 +217,22 @@ public class CodeInsightUtil {
}
public static <T extends PsiMember & PsiDocCommentOwner> Comparator<T> createSortIdenticalNamedMembersComparator(PsiElement place) {
final PsiProximityComparator proximityComparator = new PsiProximityComparator(place);
return (o1, o2) -> {
boolean deprecated1 = JavaCompletionUtil.isEffectivelyDeprecated(o1);
boolean deprecated2 = JavaCompletionUtil.isEffectivelyDeprecated(o2);
if (deprecated1 && !deprecated2) return 1;
if (!deprecated1 && deprecated2) return -1;
int compare = proximityComparator.compare(o1, o2);
if (compare != 0) return compare;
return Comparator
.<T, Boolean>comparing(JavaCompletionUtil::isEffectivelyDeprecated)
.thenComparing(CodeInsightUtil::isInnerClass)
.thenComparing(new PsiProximityComparator(place))
.thenComparing(CodeInsightUtil::compareQualifiedNames);
}
String qname1 = o1 instanceof PsiClass ? ((PsiClass)o1).getQualifiedName() : null;
String qname2 = o2 instanceof PsiClass ? ((PsiClass)o2).getQualifiedName() : null;
if (qname1 == null || qname2 == null) return 0;
return qname1.compareToIgnoreCase(qname2);
};
private static boolean isInnerClass(PsiMember o) {
return o instanceof PsiClass && o.getContainingClass() != null;
}
private static int compareQualifiedNames(PsiMember o1, PsiMember o2) {
String qname1 = o1 instanceof PsiClass ? ((PsiClass)o1).getQualifiedName() : null;
String qname2 = o2 instanceof PsiClass ? ((PsiClass)o2).getQualifiedName() : null;
if (qname1 == null || qname2 == null) return 0;
return qname1.compareToIgnoreCase(qname2);
}
@NotNull
@@ -18,6 +18,8 @@ package com.intellij.java.codeInsight.intention
import com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFix
import com.intellij.lang.java.JavaLanguage
import com.intellij.pom.java.LanguageLevel
import com.intellij.psi.CommonClassNames
import com.intellij.psi.PsiClass
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
import com.intellij.psi.codeStyle.CommonCodeStyleSettings
import com.intellij.psi.codeStyle.JavaCodeStyleSettings
@@ -689,4 +691,16 @@ class Bar {
'''
assert !myFixture.filterAvailableIntentions("Import class").empty
}
void "test prefer top-level List"() {
myFixture.addClass("package foo; public interface Restore { interface List {}}")
def juList = myFixture.findClass(CommonClassNames.JAVA_UTIL_LIST)
myFixture.configureByText 'a.java', 'class F implements Lis<caret>t {}'
importClass()
myFixture.checkResult '''\
import java.util.List;
class F implements List {}'''
}
}