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
+