From 006a8d28a4df5c345833956b3e4a51d280a7a2e1 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 27 Feb 2018 11:27:40 +0100 Subject: [PATCH] disable static method call on subclass if method is from interface added in java 8, static methods in interfaces can't be called on subclasses, corresponding highlighting error provides the same fix and thus inspection is redundant --- .../ig/bugs/StaticCallOnSubclassInspection.java | 2 +- .../bugs/staticCallOnSubclass/OnInterface.java | 13 +++++++++++++ .../ig/fixes/bugs/StaticCallOnSubclassTest.java | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/bugs/staticCallOnSubclass/OnInterface.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/StaticCallOnSubclassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/StaticCallOnSubclassInspection.java index a9f42cc835ef..ba375c52b2fd 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/StaticCallOnSubclassInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/StaticCallOnSubclassInspection.java @@ -156,7 +156,7 @@ public class StaticCallOnSubclassInspection extends BaseInspection implements Cl if (declaringClass == null) { return; } - if (declaringClass.equals(referencedClass)) { + if (declaringClass.equals(referencedClass) || declaringClass.isInterface()) { return; } final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(methodExpression.getProject()).getResolveHelper(); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/bugs/staticCallOnSubclass/OnInterface.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/bugs/staticCallOnSubclass/OnInterface.java new file mode 100644 index 000000000000..b0296ce1f884 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/bugs/staticCallOnSubclass/OnInterface.java @@ -0,0 +1,13 @@ + +interface I { + static void FOO() { + + } +} + +class A implements I { + { + A.FOO(); + } +} + diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/bugs/StaticCallOnSubclassTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/bugs/StaticCallOnSubclassTest.java index de0e71f994ee..879db16897c7 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/bugs/StaticCallOnSubclassTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/bugs/StaticCallOnSubclassTest.java @@ -33,6 +33,10 @@ public class StaticCallOnSubclassTest extends IGQuickFixesTestCase { public void testMethodReference() { doTest("methodRef", InspectionGadgetsBundle.message("static.method.via.subclass.rationalize.quickfix")); } + + public void testOnInterface() { + assertQuickfixNotAvailable(InspectionGadgetsBundle.message("static.method.via.subclass.rationalize.quickfix")); + } @Override protected String getRelativePath() {