From 1a095f941b9a8e28106bd5b7fa199e3d48a62479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 5 Apr 2021 18:22:49 +0200 Subject: [PATCH 1/4] Add test case for #2757 --- .../errorprone/closeresource/FakeContext.java | 23 +++++++++++++++++++ .../rule/errorprone/xml/CloseResource.xml | 21 +++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/FakeContext.java diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/FakeContext.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/FakeContext.java new file mode 100644 index 0000000000..c676e72651 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/errorprone/closeresource/FakeContext.java @@ -0,0 +1,23 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.errorprone.closeresource; + +import java.io.Closeable; +import java.io.IOException; + +/** + * Helper class for #2757 + */ +public class FakeContext implements Closeable, AutoCloseable { + + public T getBean(Class klass) { + return null; + } + + @Override + public void close() throws IOException { + + } +} diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index 4b20baa3c6..d5cfebcf84 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -1659,4 +1659,25 @@ public class FalsePositive { } ]]> + + #2757 PMD 6.27.0 break support for Lombok's Cleanup annotation + 0 + + From cfb6b3d57bfb808a1267084eb1b8ee95649b8cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 5 Apr 2021 18:34:54 +0200 Subject: [PATCH 2/4] CloseResource: Add support for @lombok.Cleanup Fixes #2757 --- .../pmd/lang/java/ast/ASTLocalVariableDeclaration.java | 6 ++++++ .../pmd/lang/java/rule/errorprone/CloseResourceRule.java | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java index a5e241d58c..d7d71c7d28 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.lang.java.ast; import java.util.Iterator; +import java.util.List; import net.sourceforge.pmd.Rule; import net.sourceforge.pmd.annotation.InternalApi; @@ -45,6 +46,11 @@ public class ASTLocalVariableDeclaration extends AbstractJavaAccessNode implemen return visitor.visit(this, data); } + @Override + public List getDeclaredAnnotations() { + return findChildrenOfType(ASTAnnotation.class); + } + @Override public boolean hasSuppressWarningsAnnotationFor(Rule rule) { for (int i = 0; i < getNumChildren(); i++) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java index 038ccf99d5..f44a486833 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/CloseResourceRule.java @@ -45,6 +45,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression; import net.sourceforge.pmd.lang.java.ast.ASTTryStatement; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclarator; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; +import net.sourceforge.pmd.lang.java.ast.Annotatable; import net.sourceforge.pmd.lang.java.ast.JavaNode; import net.sourceforge.pmd.lang.java.ast.TypeNode; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; @@ -187,6 +188,10 @@ public class CloseResourceRule extends AbstractJavaRule { List vars = method.findDescendantsOfType(ASTVariableDeclarator.class); Map resVars = new HashMap<>(); for (ASTVariableDeclarator var : vars) { + if (var.getParent() instanceof Annotatable + && ((Annotatable) var.getParent()).isAnnotationPresent("lombok.Cleanup")) { + continue; // auto cleaned up + } TypeNode varType = getTypeOfVariable(var); if (varType != null && isResourceTypeOrSubtype(varType)) { resVars.put(var, wrappedResourceTypeOrReturn(var, varType)); From 18c55199b9278d36ee06d4af49037e247f36f10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 5 Apr 2021 18:37:29 +0200 Subject: [PATCH 3/4] Rename test --- .../pmd/lang/java/rule/errorprone/xml/CloseResource.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml index d5cfebcf84..a037edd9a5 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/CloseResource.xml @@ -1660,7 +1660,7 @@ public class FalsePositive { ]]> - #2757 PMD 6.27.0 break support for Lombok's Cleanup annotation + #2757 support @lombok.Cleanup annotation 0 Date: Sat, 10 Apr 2021 19:10:36 +0200 Subject: [PATCH 4/4] [doc] Update release notes, refs #2757, refs #3197 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..a6417c758b 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* java-errorprone + * [#2757](https://github.com/pmd/pmd/issues/2757): \[java] CloseResource: support Lombok's @Cleanup annotation + ### API Changes ### External Contributions