From e315ef4b413f302fad5d908d3127af831d5fdbb2 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Sat, 31 Jan 2015 17:46:40 +0300 Subject: [PATCH] TypeName.super.foo() when TypeName denotes interface --- .../daemon/impl/analysis/HighlightUtil.java | 4 ++-- ...SuperInterfaceMethodCalledByMatterOfInterface.java | 11 +++++++++++ .../daemon/lambda/GenericsHighlighting8Test.java | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/SuperInterfaceMethodCalledByMatterOfInterface.java 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 0e95b20019cf..ce564b32a415 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 @@ -1448,8 +1448,8 @@ public class HighlightUtil extends HighlightUtilBase { return HighlightClassUtil.reportIllegalEnclosingUsage(expr, null, aClass, expr); } - if (qualifier != null && expr.getParent() instanceof PsiMethodReferenceExpression && aClass.isInterface()) { - //15.13 + if (qualifier != null && aClass.isInterface() && languageLevel.isAtLeast(LanguageLevel.JDK_1_8)) { + //15.12.1 for method invocation expressions; 15.13 for method references //If TypeName denotes an interface, I, then let T be the type declaration immediately enclosing the method reference expression. //It is a compile-time error if I is not a direct superinterface of T, //or if there exists some other direct superclass or direct superinterface of T, J, such that J is a subtype of I. diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/SuperInterfaceMethodCalledByMatterOfInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/SuperInterfaceMethodCalledByMatterOfInterface.java new file mode 100644 index 000000000000..01c14835e36b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/SuperInterfaceMethodCalledByMatterOfInterface.java @@ -0,0 +1,11 @@ +interface I { + default void m() {} + +} +interface J extends I {} + +class C implements I, J { + { + I.super.m(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java index 96f5c3da5154..88ec8af16dd3 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java @@ -788,6 +788,10 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase { doTest(false); } + public void testSuperInterfaceMethodCalledByMatterOfInterface() throws Exception { + doTest(false); + } + private void doTest() { doTest(false); }