From cdbf46f4a15f68946f5b47c07966e839aaa94bf2 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 10 Jan 2013 15:15:43 +0100 Subject: [PATCH] IDEA-98682 (Class extends utility class does not ignore on empty child classes) --- .../siyeh/ig/psiutils/UtilityClassUtil.java | 6 ++--- .../ExtendsUtilityClass.java | 27 +++++++++++++++++++ .../extends_utility_class/expected.xml | 9 +++++++ .../ExtendsUtilityClassInspectionTest.java | 12 +++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/ExtendsUtilityClass.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/expected.xml create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsUtilityClassInspectionTest.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UtilityClassUtil.java b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UtilityClassUtil.java index f31a46aeb342..fc60bc19b19d 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UtilityClassUtil.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UtilityClassUtil.java @@ -26,7 +26,7 @@ public class UtilityClassUtil { return isUtilityClass(aClass, true); } - public static boolean isUtilityClass(@NotNull PsiClass aClass, boolean checkExtends) { + public static boolean isUtilityClass(@NotNull PsiClass aClass, boolean fullCheck) { if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) { return false; } @@ -34,7 +34,7 @@ public class UtilityClassUtil { return false; } final PsiReferenceList extendsList = aClass.getExtendsList(); - if (checkExtends && extendsList != null && extendsList.getReferenceElements().length > 0) { + if (fullCheck && extendsList != null && extendsList.getReferenceElements().length > 0) { return false; } final PsiReferenceList implementsList = aClass.getImplementsList(); @@ -50,7 +50,7 @@ public class UtilityClassUtil { if (!allFieldsStatic(fields)) { return false; } - return staticMethodCount != 0 || fields.length != 0; + return (!fullCheck || staticMethodCount != 0) || fields.length != 0; } private static boolean allFieldsStatic(PsiField[] fields) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/ExtendsUtilityClass.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/ExtendsUtilityClass.java new file mode 100644 index 000000000000..553a464e3273 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/ExtendsUtilityClass.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.igtest.inheritance.extends_utility_class; + +public class ExtendsUtilityClass { +// all members are static + + public static void member() {} +} +class Extender extends ExtendsUtilityClass {} +class Extender2 extends ExtendsUtilityClass { + + public void nonStaticMethod() {} +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/expected.xml new file mode 100644 index 000000000000..0511c7f95cb7 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/inheritance/extends_utility_class/expected.xml @@ -0,0 +1,9 @@ + + + + ExtendsUtilityClass.java + 24 + Class extends utility class + Class <code>Extender2</code> extends utility class 'ExtendsUtilityClass' #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsUtilityClassInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsUtilityClassInspectionTest.java new file mode 100644 index 000000000000..3e41b435baad --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/inheritance/ExtendsUtilityClassInspectionTest.java @@ -0,0 +1,12 @@ +package com.siyeh.ig.inheritance; + +import com.siyeh.ig.IGInspectionTestCase; + +public class ExtendsUtilityClassInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + final ExtendsUtilityClassInspection tool = new ExtendsUtilityClassInspection(); + tool.ignoreUtilityClasses = true; + doTest("com/siyeh/igtest/inheritance/extends_utility_class", tool); + } +}