From 7ed7fc0e42a5e51089ea76b4b0ad08af8827334a Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 27 May 2022 15:04:36 +0200 Subject: [PATCH] [java] EmptyControlStatement: Fix NPE for concise try-with-resources --- .../sourceforge/pmd/lang/java/ast/ASTResource.java | 9 +++++++++ .../rule/codestyle/EmptyControlStatementRule.java | 2 +- .../rule/codestyle/xml/EmptyControlStatement.xml | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java index f6ce7781cb..b9aafd7f83 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTResource.java @@ -25,6 +25,15 @@ public class ASTResource extends ASTFormalParameter { return visitor.visit(this, data); } + public String getName() { + ASTVariableDeclaratorId variableDeclaratorId = getVariableDeclaratorId(); + if (variableDeclaratorId != null) { + return variableDeclaratorId.getName(); + } + // concise try-with-resources + return getFirstChildOfType(ASTName.class).getImage(); + } + // TODO Should we deprecate all methods from ASTFormalParameter? } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/EmptyControlStatementRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/EmptyControlStatementRule.java index 5de4bca7ed..c9b075f067 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/EmptyControlStatementRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/EmptyControlStatementRule.java @@ -132,7 +132,7 @@ public class EmptyControlStatementRule extends AbstractJavaRule { if (resources != null) { for (ASTResource resource : resources.findDescendantsOfType(ASTResource.class)) { hasResource = true; - String name = resource.getVariableDeclaratorId().getName(); + String name = resource.getName(); if (!JavaRuleUtil.isExplicitUnusedVarName(name)) { allResourcesIgnored = false; break; diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/EmptyControlStatement.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/EmptyControlStatement.xml index 69275f3bc9..1ccd313fff 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/EmptyControlStatement.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/codestyle/xml/EmptyControlStatement.xml @@ -106,6 +106,20 @@ ]]> + + empty concise try-with-resource - not ok + 1 + 4 + + pos, empty synchronized stmt