From f0830eb973aef7ddbb496bffb426305dbe10ef00 Mon Sep 17 00:00:00 2001 From: Phokham Nonava Date: Fri, 1 Feb 2019 11:02:42 +0100 Subject: [PATCH] Update instead of override classHasLombokAnnotation flag Fixes issues where inner classes would override this flag. --- .../java/rule/AbstractLombokAwareRule.java | 12 ++++-- .../java/rule/design/ImmutableFieldRule.java | 2 +- .../java/rule/design/xml/SingularField.xml | 41 +++++++++++++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java index 710f374aee..e0f8fd5345 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/AbstractLombokAwareRule.java @@ -65,21 +65,27 @@ public class AbstractLombokAwareRule extends AbstractIgnoredAnnotationRule { @Override public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { + boolean oldValue = classHasLombokAnnotation; classHasLombokAnnotation = hasLombokAnnotation(node); - return super.visit(node, data); + Object result = super.visit(node, data); + classHasLombokAnnotation = oldValue; + return result; } @Override public Object visit(ASTEnumDeclaration node, Object data) { + boolean oldValue = classHasLombokAnnotation; classHasLombokAnnotation = hasLombokAnnotation(node); - return super.visit(node, data); + Object result = super.visit(node, data); + classHasLombokAnnotation = oldValue; + return result; } /** * Returns whether there have been class level Lombok annotations found. * Note: this can only be queried after the class declaration node has been * processed. - * + * * @return true if a lombok annotation at the class level has * been found */ diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java index d409c66d90..a4385b640f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ImmutableFieldRule.java @@ -55,7 +55,7 @@ public class ImmutableFieldRule extends AbstractLombokAwareRule { AccessNode accessNodeParent = field.getAccessNodeParent(); if (accessNodeParent.isStatic() || !accessNodeParent.isPrivate() || accessNodeParent.isFinal() || accessNodeParent.isVolatile() - || hasClassLombokAnnotation() + || hasLombokAnnotation(node) || hasIgnoredAnnotation((Annotatable) accessNodeParent)) { continue; } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml index 5b9ff1086a..4caef8662a 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/SingularField.xml @@ -573,6 +573,47 @@ public class MyClass { ]]> + + [java] SingularField: Lombok false positive with inner class and annotated outer class + 0 + + + + + [java] SingularField: Lombok false positive with annotated inner class + 1 + + #177 [java] SingularField with lambdas as final fields