From 51f6813ee3c8a5233a74f8eaa96e92e967a2a632 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 9 Mar 2018 11:16:59 +0100 Subject: [PATCH] valid static method reference on class's inheritor (IDEA-187974) --- .../daemon/impl/analysis/HighlightVisitorImpl.java | 5 ++++- ...hodOfInterfaceAccessibleThroughMethodReference.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 6151a5225e99..5438a8afb9ac 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -1420,7 +1420,10 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh } if (!myHolder.hasErrorResults() && method instanceof PsiMethod && ((PsiMethod)method).hasModifierProperty(PsiModifier.STATIC)) { - myHolder.add(HighlightMethodUtil.checkStaticInterfaceCallQualifier(expression, result, expression.getTextRange(), ((PsiMethod)method).getContainingClass())); + PsiClass containingClass = ((PsiMethod)method).getContainingClass(); + if (containingClass != null && containingClass.isInterface()) { + myHolder.add(HighlightMethodUtil.checkStaticInterfaceCallQualifier(expression, result, expression.getTextRange(), containingClass)); + } } if (!myHolder.hasErrorResults()) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/StaticMethodOfInterfaceAccessibleThroughMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/StaticMethodOfInterfaceAccessibleThroughMethodReference.java index 83d8a8e9e15b..9d4798d4af3d 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/StaticMethodOfInterfaceAccessibleThroughMethodReference.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/interfaceMethods/StaticMethodOfInterfaceAccessibleThroughMethodReference.java @@ -9,3 +9,13 @@ class A implements I { System.out.println(r); } } + +class B { + static void foo() {} +} + +class C extends B { + { + Runnable r = C::foo; + } +} \ No newline at end of file