From 149159c6cfc45f99b11010482b3a148d5c8d7f37 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 11 Feb 2013 21:09:30 +0100 Subject: [PATCH] IDEA-100840 ("No-op method in abstract class": Complains about native methods) --- .../NoopMethodInAbstractClassInspection.java | 17 ++++++----------- .../NoopMethodInAbstractClass.java | 8 ++++++++ .../noop_method_in_abstract_class/expected.xml | 9 +++++++++ ...NoopMethodInAbstractClassInspectionTest.java | 10 ++++++++++ 4 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/NoopMethodInAbstractClass.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/expected.xml create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspectionTest.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspection.java index 761a5ed58279..dfcd908d8e77 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,26 +28,22 @@ public class NoopMethodInAbstractClassInspection extends BaseInspection { @NotNull public String getDisplayName() { - return InspectionGadgetsBundle.message( - "noop.method.in.abstract.class.display.name"); + return InspectionGadgetsBundle.message("noop.method.in.abstract.class.display.name"); } @NotNull protected String buildErrorString(Object... infos) { - return InspectionGadgetsBundle.message( - "noop.method.in.abstract.class.problem.descriptor"); + return InspectionGadgetsBundle.message("noop.method.in.abstract.class.problem.descriptor"); } public BaseInspectionVisitor buildVisitor() { return new NoopMethodInAbstractClassVisitor(); } - private static class NoopMethodInAbstractClassVisitor - extends BaseInspectionVisitor { + private static class NoopMethodInAbstractClassVisitor extends BaseInspectionVisitor { @Override public void visitMethod(@NotNull PsiMethod method) { - //no call to super, so we don't drill into anonymous classes if (method.isConstructor()) { return; } @@ -55,14 +51,13 @@ public class NoopMethodInAbstractClassInspection extends BaseInspection { if (containingClass == null) { return; } - if (containingClass.isInterface() || - containingClass.isAnnotationType()) { + if (containingClass.isInterface() || containingClass.isAnnotationType()) { return; } if (!containingClass.hasModifierProperty(PsiModifier.ABSTRACT)) { return; } - if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { + if (method.hasModifierProperty(PsiModifier.ABSTRACT) || method.hasModifierProperty(PsiModifier.NATIVE)) { return; } if (!MethodUtils.isEmpty(method)) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/NoopMethodInAbstractClass.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/NoopMethodInAbstractClass.java new file mode 100644 index 000000000000..214152da741d --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/NoopMethodInAbstractClass.java @@ -0,0 +1,8 @@ +package com.siyeh.igtest.classlayout.noop_method_in_abstract_class; + +abstract class NoopMethodInAbstractClass { + + void foo() {} + + native int bar(); +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/expected.xml new file mode 100644 index 000000000000..79ebd7255099 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/noop_method_in_abstract_class/expected.xml @@ -0,0 +1,9 @@ + + + + NoopMethodInAbstractClass.java + 5 + No-op method in abstract class + No-op Method <code>foo()</code> should be made abstract #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspectionTest.java new file mode 100644 index 000000000000..a7737a07f77c --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/classlayout/NoopMethodInAbstractClassInspectionTest.java @@ -0,0 +1,10 @@ +package com.siyeh.ig.classlayout; + +import com.siyeh.ig.IGInspectionTestCase; + +public class NoopMethodInAbstractClassInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + doTest("com/siyeh/igtest/classlayout/noop_method_in_abstract_class", new NoopMethodInAbstractClassInspection()); + } +} \ No newline at end of file