mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
Interface.super method calls: ensure valid qualifier (IDEA-173888)
forbid calls to super methods which are overridden in direct superinterfaces
This commit is contained in:
@@ -1579,11 +1579,13 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
final PsiElement parent = expr.getParent();
|
||||
final PsiElement resolved = parent instanceof PsiReferenceExpression ? ((PsiReferenceExpression)parent).resolve() : null;
|
||||
|
||||
PsiClass containingClass =
|
||||
ObjectUtils.notNull(resolved instanceof PsiMethod ? ((PsiMethod)resolved).getContainingClass() : null, aClass);
|
||||
for (PsiClass superClass : classT.getSupers()) {
|
||||
if (superClass.isInheritor(aClass, true)) {
|
||||
if (superClass.isInheritor(containingClass, true)) {
|
||||
String cause = null;
|
||||
if (superClass.isInterface()) {
|
||||
cause = "redundant interface " + format(aClass) + " is extended by ";
|
||||
if (superClass.isInheritor(aClass, true) && superClass.isInterface()) {
|
||||
cause = "redundant interface " + format(containingClass) + " is extended by ";
|
||||
}
|
||||
else if (resolved instanceof PsiMethod &&
|
||||
MethodSignatureUtil.findMethodBySuperMethod(superClass, (PsiMethod)resolved, true) != resolved) {
|
||||
|
||||
@@ -81,3 +81,27 @@ class InsideThisRxpression {
|
||||
public interface Bar extends Foo {}
|
||||
}
|
||||
|
||||
class SameDefaultMethodDifferentInheritors {
|
||||
interface A { default void a() {} }
|
||||
interface B extends A { default void a() {} }
|
||||
interface B1 extends A { }
|
||||
interface C extends A {}
|
||||
|
||||
class Clazz implements B, C {
|
||||
{
|
||||
<error descr="Bad type qualifier in default super call: method a is overridden in SameDefaultMethodDifferentInheritors.B">C</error>.super.a();
|
||||
}
|
||||
}
|
||||
|
||||
class Clazz1 implements B1, C {
|
||||
{
|
||||
C.super.a();
|
||||
}
|
||||
}
|
||||
|
||||
class Clazz2 implements C {
|
||||
{
|
||||
C.super.a();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user