From 8319a66f8a5487a39d6c2f9bf05153d6f3e2cc52 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 3 Sep 2015 09:56:00 +0200 Subject: [PATCH] IDEA-144571 (False positive inspection "Abstract class may be interface" on non-static inner class) --- .../ig/classlayout/ClassMayBeInterfaceInspection.java | 9 +++++++++ .../classlayout/ClassMayBeInterfaceInspection.java | 8 -------- .../ClassMayBeInterfaceInspectionTest.java | 11 +++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) delete mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/ClassMayBeInterfaceInspection.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspection.java index ef76238402a6..4196bcb80785 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspection.java @@ -29,6 +29,8 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.memory.InnerClassReferenceVisitor; +import com.siyeh.ig.psiutils.ClassUtils; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -210,6 +212,13 @@ public class ClassMayBeInterfaceInspection extends BaseInspection { if (!mayBeInterface(aClass)) { return; } + if (ClassUtils.isInnerClass(aClass)) { + final InnerClassReferenceVisitor visitor = new InnerClassReferenceVisitor(aClass); + aClass.accept(visitor); + if (!visitor.canInnerClassBeStatic()) { + return; + } + } registerClassError(aClass); } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/ClassMayBeInterfaceInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/ClassMayBeInterfaceInspection.java deleted file mode 100644 index ee7e0a7ca5dc..000000000000 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/ClassMayBeInterfaceInspection.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.siyeh.igtest.classlayout; - -public abstract class ClassMayBeInterfaceInspection -{ - public static final int foo = 1; - - public abstract void bar(); -} diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspectionTest.java index 1eca1dfa8e51..4e59a070e5b8 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspectionTest.java @@ -46,6 +46,17 @@ public class ClassMayBeInterfaceInspectionTest extends LightInspectionTestCase { " public class A {}\n" + "}"); } + + public void testMethodCantBeDefault() { + doTest("class Issue {\n" + + " public abstract class Inner {\n" + + " public Issue getParent() {\n" + + " return Issue.this;\n" + + " }\n" + + " }\n" + + "}"); + } + @Override protected InspectionProfileEntry getInspection() { final ClassMayBeInterfaceInspection inspection = new ClassMayBeInterfaceInspection();