mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-203204 Import-class popup suggests java.util.List as the last item
This commit is contained in:
@@ -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
|
||||
|
||||
+14
@@ -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 {}'''
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user