IDEA-144571 (False positive inspection "Abstract class may be interface" on non-stati...
authorBas Leijdekkers <basleijdekkers@gmail.com>
Thu, 3 Sep 2015 07:56:00 +0000 (09:56 +0200)
committerBas Leijdekkers <basleijdekkers@gmail.com>
Thu, 3 Sep 2015 07:57:18 +0000 (09:57 +0200)
plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspection.java
plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/ClassMayBeInterfaceInspection.java [deleted file]
plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/ClassMayBeInterfaceInspectionTest.java

index ef76238402a661f1d64f9dd494c351d676e0cc57..4196bcb80785fe42901916ddd3f0feb72c07e5e3 100644 (file)
@@ -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.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;
 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 (!mayBeInterface(aClass)) {
         return;
       }
+      if (ClassUtils.isInnerClass(aClass)) {
+        final InnerClassReferenceVisitor visitor = new InnerClassReferenceVisitor(aClass);
+        aClass.accept(visitor);
+        if (!visitor.canInnerClassBeStatic()) {
+          return;
+        }
+      }
       registerClassError(aClass);
     }
 
       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 (file)
index ee7e0a7..0000000
+++ /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();
-}
index 1eca1dfa8e51887bf94d1f5c3927e4887e9918db..4e59a070e5b83bbb91b2944b7db86e6b674489e5 100644 (file)
@@ -46,6 +46,17 @@ public class ClassMayBeInterfaceInspectionTest extends LightInspectionTestCase {
            "    public class A {}\n" +
            "}");
   }
            "    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();
   @Override
   protected InspectionProfileEntry getInspection() {
     final ClassMayBeInterfaceInspection inspection = new ClassMayBeInterfaceInspection();