From cce22b93b8242d023f082c875457681854c0d41c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 31 Mar 2024 02:13:00 -0300 Subject: [PATCH 1/3] Add test case for #2056 --- .../java/rule/errorprone/xml/CloseResource.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 a59b5d0be1..f0e32dbfd4 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 @@ -2026,6 +2026,24 @@ public class LocalVariableTypeInference { var list = new ArrayList(); // infers ArrayList var stream = list.stream(); // infers Stream, is never closed } +} + ]]> + + + + Parameters don't need to be closed even if casted #2056 + 0 + From 44b7e21e038b73135c3bc36e1b1be37b1b3d6d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 31 Mar 2024 02:13:17 -0300 Subject: [PATCH 2/3] Fix #2056 --- .../lang/java/rule/errorprone/CloseResourceRule.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 7a95414dc1..ac75cb0f90 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 @@ -20,6 +20,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTArgumentList; import net.sourceforge.pmd.lang.java.ast.ASTAssignableExpr.ASTNamedReferenceExpr; import net.sourceforge.pmd.lang.java.ast.ASTAssignmentExpression; import net.sourceforge.pmd.lang.java.ast.ASTBlock; +import net.sourceforge.pmd.lang.java.ast.ASTCastExpression; import net.sourceforge.pmd.lang.java.ast.ASTConstructorCall; import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTExecutableDeclaration; @@ -340,8 +341,13 @@ public class CloseResourceRule extends AbstractJavaRule { if (wrappedVarName != null) { ASTFormalParameters methodParams = method.getFormalParameters(); for (ASTFormalParameter param : methodParams) { - if ((isResourceTypeOrSubtype(param) || wrappedVarName.getParent() instanceof ASTVariableDeclarator - || wrappedVarName.getParent() instanceof ASTAssignmentExpression) + // get the parent node where it's used (no casts) + Node parentUse = wrappedVarName.getParent(); + if (parentUse instanceof ASTCastExpression) { + parentUse = parentUse.getParent(); + } + if ((isResourceTypeOrSubtype(param) || parentUse instanceof ASTVariableDeclarator + || parentUse instanceof ASTAssignmentExpression) && JavaAstUtils.isReferenceToVar(wrappedVarName, param.getVarId().getSymbol())) { return true; } From 02e695ffdb4fbce85c4776453787f0bb32259c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 31 Mar 2024 02:14:35 -0300 Subject: [PATCH 3/3] Update changelog, refs #2056 --- docs/pages/release_notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index fba5e1ebd8..adadbf9968 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -21,6 +21,8 @@ This is a {{ site.pmd.release_type }} release. * [#4881](https://github.com/pmd/pmd/issues/4881): \[java] ClassNamingConventions: interfaces are identified as abstract classes (regression in 7.0.0) * java-design * [#4873](https://github.com/pmd/pmd/issues/4873): \[java] AvoidCatchingGenericException: Can no longer suppress on the exception itself +* java-errorprone + * [#2056](https://github.com/pmd/pmd/issues/2056): \[java] CloseResource false-positive with URLClassLoader in cast expression * java-performance * [#3845](https://github.com/pmd/pmd/issues/3845): \[java] InsufficientStringBufferDeclaration should consider literal expression * [#4874](https://github.com/pmd/pmd/issues/4874): \[java] StringInstantiation: False-positive when using `new String(charArray)`