From 6afe513225798b4c422815f4b900049b945f9eac Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 May 2016 16:33:10 +0200 Subject: [PATCH] Fixes #1480 false positive on public modifier used with inner interface in enum --- .../rule/unusedcode/UnusedModifierRule.java | 40 +++++++++++++------ .../rule/unusedcode/xml/UnusedModifier.xml | 12 ++++++ src/site/markdown/overview/changelog.md | 2 + 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/unusedcode/UnusedModifierRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/unusedcode/UnusedModifierRule.java index 6c13204636..fb10b589f8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/unusedcode/UnusedModifierRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/unusedcode/UnusedModifierRule.java @@ -13,22 +13,36 @@ import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; public class UnusedModifierRule extends AbstractJavaRule { public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { - if (!node.isInterface() && node.isNested() && (node.isPublic() || node.isStatic())) { - ASTClassOrInterfaceDeclaration parentClassInterface = node - .getFirstParentOfType(ASTClassOrInterfaceDeclaration.class); - if (parentClassInterface != null && parentClassInterface.isInterface()) { - addViolation(data, node, getMessage()); - } - } else if (node.isInterface() && node.isNested() && (node.isPublic() || node.isStatic())) { - ASTClassOrInterfaceDeclaration parentClassInterface = node - .getFirstParentOfType(ASTClassOrInterfaceDeclaration.class); - ASTEnumDeclaration parentEnum = node.getFirstParentOfType(ASTEnumDeclaration.class); - if (parentClassInterface != null - && (parentClassInterface.isInterface() || !parentClassInterface.isInterface() && node.isStatic()) - || parentEnum != null) { + if (!node.isNested()) return super.visit(node, data); + + ASTClassOrInterfaceDeclaration parentClassOrInterface = node + .getFirstParentOfType(ASTClassOrInterfaceDeclaration.class); + ASTEnumDeclaration parentEnum = node.getFirstParentOfType(ASTEnumDeclaration.class); + + if (node.isInterface() && node.isPublic()) { + // a public interface + if (parentClassOrInterface != null && parentClassOrInterface.isInterface()) { + // within a interface addViolation(data, node, getMessage()); } } + + if (node.isInterface() && node.isStatic()) { + // a static interface + if (parentClassOrInterface != null || parentEnum != null) { + // within a interface, class or enum + addViolation(data, node, getMessage()); + } + } + + if (!node.isInterface() && (node.isPublic() || node.isStatic())) { + // a public and/or static class + if (parentClassOrInterface != null && parentClassOrInterface.isInterface()) { + // within a interface + addViolation(data, node, getMessage()); + } + } + return super.visit(node, data); } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unusedcode/xml/UnusedModifier.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unusedcode/xml/UnusedModifier.xml index 4fbbd0a57f..1937fd763e 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unusedcode/xml/UnusedModifier.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/unusedcode/xml/UnusedModifier.xml @@ -281,6 +281,18 @@ public enum MyEnum private static class MyInnerClass // violation detected by PMD { } +} + ]]> + + + + #1480 false positive on public modifier used with inner interface in enum + 0 + diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 9ae5c29031..2c872563c3 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -16,6 +16,8 @@ * java-unusedcode/UnusedLocalVariable * [#1484](https://sourceforge.net/p/pmd/bugs/1484/): UnusedLocalVariable - false positive - parenthesis +* java-unusedcode/UnusedModifier + * [#1480](https://sourceforge.net/p/pmd/bugs/1480/): false positive on public modifier used with inner interface in enum * General * [#1481](https://sourceforge.net/p/pmd/bugs/1481/): no problems found results in blank file instead of empty xml