From 1d5ff33cbe74b473f6c9f2421a67c7bd72ad98a2 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 20 May 2015 12:53:16 +0200 Subject: [PATCH] extend check for enclosing instance for java 8 default methods in interfaces (IDEA-140492) --- .../codeInsight/daemon/impl/analysis/HighlightUtil.java | 6 ++++++ ...TypeNameInterfaceSuperMethodReferenceApplicability.java | 7 +++++++ 2 files changed, 13 insertions(+) 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 78f4713426ce..b6dacbe717fb 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 @@ -1522,6 +1522,12 @@ public class HighlightUtil extends HighlightUtilBase { .descriptionAndTooltip(JavaErrorMessages.message("bad.qualifier.in.super.method.reference", format(aClass), formatClass(superClass))).create(); } } + + if (expr instanceof PsiSuperExpression && !classT.isInheritor(aClass, false)) { + return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) + .range(qualifier) + .descriptionAndTooltip(JavaErrorMessages.message("no.enclosing.instance.in.scope", format(aClass))).create(); + } } } 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 28f175aae9e4..23bdff178cca 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/TypeNameInterfaceSuperMethodReferenceApplicability.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newMethodRef/TypeNameInterfaceSuperMethodReferenceApplicability.java @@ -38,5 +38,12 @@ class Test { } }; } + + interface D extends J { + default void m() { + D.super.toString(); + J.super.toString(); + } + } }