diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index af791a1cf50a..d58fe33d0cfd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -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) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/TypeNameInterfaceSuperMethodReferenceApplicability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/TypeNameInterfaceSuperMethodReferenceApplicability.java index 5fc439fd75e8..0a030b150e1e 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/TypeNameInterfaceSuperMethodReferenceApplicability.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/TypeNameInterfaceSuperMethodReferenceApplicability.java @@ -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 { + { + C.super.a(); + } + } + + class Clazz1 implements B1, C { + { + C.super.a(); + } + } + + class Clazz2 implements C { + { + C.super.a(); + } + } +}