mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
red code green: warn about non inner classes used in super constructor call qualifiers (IDEA-57443)
This commit is contained in:
@@ -836,11 +836,15 @@ public class HighlightClassUtil {
|
||||
PsiClass targetClass = aClass.getSuperClass();
|
||||
if (targetClass == null) return null;
|
||||
PsiExpression qualifier = superCall.getMethodExpression().getQualifierExpression();
|
||||
if (qualifier != null && PsiUtil.isInnerClass(targetClass)) {
|
||||
PsiClass outerClass = targetClass.getContainingClass();
|
||||
if (outerClass != null) {
|
||||
PsiClassType outerType = JavaPsiFacade.getInstance(project).getElementFactory().createType(outerClass);
|
||||
return HighlightUtil.checkAssignability(outerType, null, qualifier, qualifier);
|
||||
if (qualifier != null) {
|
||||
if (PsiUtil.isInnerClass(targetClass)) {
|
||||
PsiClass outerClass = targetClass.getContainingClass();
|
||||
if (outerClass != null) {
|
||||
PsiClassType outerType = JavaPsiFacade.getInstance(project).getElementFactory().createType(outerClass);
|
||||
return HighlightUtil.checkAssignability(outerType, null, qualifier, qualifier);
|
||||
}
|
||||
} else {
|
||||
return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, qualifier, "'" + HighlightUtil.formatClass(targetClass) + "' is not an inner class");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
class A {
|
||||
class S {
|
||||
}
|
||||
|
||||
class C extends S {
|
||||
C(A c) {
|
||||
c.super();
|
||||
}
|
||||
C(B b) {
|
||||
b.super();
|
||||
}
|
||||
}
|
||||
}
|
||||
class B extends A {}
|
||||
|
||||
class A1 {
|
||||
static class S {
|
||||
}
|
||||
|
||||
class C extends S {
|
||||
C(A1 c) {
|
||||
<error descr="'A1.S' is not an inner class">c</error>.super();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class C2 {
|
||||
C2(String c){
|
||||
<error descr="'java.lang.Object' is not an inner class">c</error>.super();
|
||||
}
|
||||
}
|
||||
|
||||
class A3 {
|
||||
class S {
|
||||
}
|
||||
|
||||
class C extends S {
|
||||
C(String c) {
|
||||
<error descr="Incompatible types. Found: 'java.lang.String', required: 'A3'">c</error>.super();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -358,4 +358,5 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
public void testRegexp() throws Exception { doTest(false, false); }
|
||||
public void testUnsupportedFeatures() throws Exception { doTest(false, false); }
|
||||
public void testThisBeforeSuper() throws Exception { doTest(false, false); }
|
||||
public void testExplicitConstructorInvocation() throws Exception { doTest(false, false); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user