From 630b92b64e73c2bd0d9af76f9b8d387dd4ab01b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Mon, 30 Jan 2017 12:59:07 -0300 Subject: [PATCH 1/2] [java] Treat annotation members as public static final - This fixes #215 - I created a new method so we didn't change public APIs --- .../pmd/lang/java/ast/ASTFieldDeclaration.java | 15 +++++++++++---- .../lang/java/ast/ASTFieldDeclarationTest.java | 11 +++++++++++ .../xml/RedundantFieldInitializer.xml | 10 ++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) 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 + From 898dbf0fe331d9eb80f4a4db2322ec287dd6b3a7 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sun, 5 Feb 2017 17:46:22 +0100 Subject: [PATCH 2/2] Update changelog, fixes #215 --- src/site/markdown/overview/changelog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 52da9540f0..031f0d70c3 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -20,6 +20,8 @@ This is a bug fixing release, no major changes were introduced. ### Fixed Issues +* java-optimizations + * [#215](https://github.com/pmd/pmd/issues/215): \[java] RedundantFieldInitializer report for annotation field not explicitly marked as final ### API Changes