diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java index 3d02e23a35..5e57e7f299 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.java @@ -53,7 +53,7 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D @Override public boolean isFinal() { - if (isInterfaceMember()) { + if (isAnnotationMember() || isInterfaceMember()) { return true; } return super.isFinal(); @@ -61,7 +61,7 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D @Override public boolean isPrivate() { - if (isInterfaceMember()) { + if (isAnnotationMember() || isInterfaceMember()) { return false; } return super.isPrivate(); @@ -69,7 +69,7 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D @Override public boolean isPackagePrivate() { - if (isInterfaceMember()) { + if (isAnnotationMember() || isInterfaceMember()) { return false; } return super.isPackagePrivate(); @@ -77,12 +77,19 @@ public class ASTFieldDeclaration extends AbstractJavaAccessTypeNode implements D @Override public boolean isProtected() { - if (isInterfaceMember()) { + if (isAnnotationMember() || isInterfaceMember()) { return false; } return super.isProtected(); } + public boolean isAnnotationMember() { + if (jjtGetParent().jjtGetParent() instanceof ASTAnnotationTypeBody) { + return true; + } + return false; + } + public boolean isInterfaceMember() { if (jjtGetParent().jjtGetParent() instanceof ASTEnumBody) { return false; diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclarationTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclarationTest.java index 2f7432c992..e6de1f4a6e 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclarationTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclarationTest.java @@ -51,6 +51,15 @@ public class ASTFieldDeclarationTest extends ParserTst { " String[] foo;" + PMD.EOL + "}"; + @Test + public void testWithAnnotation() { + ASTCompilationUnit cu = parseJava15(TEST5); + ASTFieldDeclaration node = cu.findDescendantsOfType(ASTFieldDeclaration.class).get(0); + assertFalse(node.isInterfaceMember()); + assertTrue(node.isAnnotationMember()); + } + + private static final String TEST2 = "class Foo {" + PMD.EOL + " String[][][] foo;" + PMD.EOL + @@ -67,6 +76,8 @@ public class ASTFieldDeclarationTest extends ParserTst { " private int x;" + PMD.EOL + "}"; + private static final String TEST5 = "public @interface Foo {" + PMD.EOL + " int BAR = 6;" + PMD.EOL + "}"; + @Test public void testGetVariableName() { int id = 0; diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/optimizations/xml/RedundantFieldInitializer.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/optimizations/xml/RedundantFieldInitializer.xml index 72cd71aa88..0a6ec60b2f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/optimizations/xml/RedundantFieldInitializer.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/optimizations/xml/RedundantFieldInitializer.xml @@ -1309,6 +1309,16 @@ public class SomeClass { + + + + #215 - False positive for annotation fields + 0 +