mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
EA-47133 - SOE: GenericsUtil.getLeastUpperClassesInner
This commit is contained in:
@@ -186,18 +186,21 @@ public class GenericsUtil {
|
||||
public static PsiClass[] getLeastUpperClasses(PsiClass aClass, PsiClass bClass) {
|
||||
if (InheritanceUtil.isInheritorOrSelf(aClass, bClass, true)) return new PsiClass[]{bClass};
|
||||
Set<PsiClass> supers = new LinkedHashSet<PsiClass>();
|
||||
getLeastUpperClassesInner(aClass, bClass, supers);
|
||||
Set<PsiClass> visited = new HashSet<PsiClass>();
|
||||
getLeastUpperClassesInner(aClass, bClass, supers, visited);
|
||||
return supers.toArray(new PsiClass[supers.size()]);
|
||||
}
|
||||
|
||||
private static void getLeastUpperClassesInner(PsiClass aClass, PsiClass bClass, Set<PsiClass> supers) {
|
||||
private static void getLeastUpperClassesInner(PsiClass aClass, PsiClass bClass, Set<PsiClass> supers, Set<PsiClass> visited) {
|
||||
if (bClass.isInheritor(aClass, true)) {
|
||||
addSuper(supers, aClass);
|
||||
}
|
||||
else {
|
||||
final PsiClass[] aSupers = aClass.getSupers();
|
||||
for (PsiClass aSuper : aSupers) {
|
||||
getLeastUpperClassesInner(aSuper, bClass, supers);
|
||||
if (visited.add(aSuper)) {
|
||||
getLeastUpperClassesInner(aSuper, bClass, supers, visited);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
<error descr="Cyclic inheritance involving 'A'">interface A extends A</error> {}
|
||||
interface B {}
|
||||
|
||||
<error descr="Cyclic inheritance involving 'A'">class T implements A, B</error>{
|
||||
<T1> T1 foo(A a, B b) {
|
||||
return null;
|
||||
}
|
||||
|
||||
void bar (boolean a, A a1, B b1){
|
||||
<error descr="Incompatible types. Found: 'java.lang.Object', required: 'T'">T t = a ? a1 : b1;</error>
|
||||
}
|
||||
}
|
||||
@@ -287,6 +287,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
|
||||
public void testIDEA104100() {doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false);}
|
||||
public void testIDEA104160() {doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false);}
|
||||
public void testSOEInLeastUpperClass() {doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false);}
|
||||
|
||||
public void testJavaUtilCollections_NoVerify() throws Exception {
|
||||
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));
|
||||
|
||||
Reference in New Issue
Block a user