From 979a60dca1fbf09cd080ee760f3f2d75431da568 Mon Sep 17 00:00:00 2001 From: Xavier Le Vourch Date: Wed, 23 Jul 2008 00:51:42 +0000 Subject: [PATCH] merged from 4.2 branch: Fixed bug 2002722 - false + in UseStringBufferForStringAppends git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@6335 51baf565-9d33-0410-a72c-fc3788e3496d --- pmd/etc/changelog.txt | 1 + .../xml/UseStringBufferForStringAppends.xml | 32 +++++++++++++++++++ .../UseStringBufferForStringAppendsRule.java | 8 ++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/pmd/etc/changelog.txt b/pmd/etc/changelog.txt index 57dbb07404..8c67edf83b 100644 --- a/pmd/etc/changelog.txt +++ b/pmd/etc/changelog.txt @@ -343,6 +343,7 @@ Fixed bug 1988829 - Violation reported without source file name (actually a fix Fixed bug 1989814 - false +: ConsecutiveLiteralAppends Fixed bug 1977230 - false positive: UselessOverridingMethod Fixed bug 1998185 - BeanMembersShouldSerialize vs @SuppressWarnings("serial") +Fixed bug 2002722 - false + in UseStringBufferForStringAppends ruleset.dtd and ruleset_xml_schema.xsd added to jar file in rulesets directory bin and java14/bin scripts: retroweaver version was not correct in java14/bin scripts diff --git a/pmd/regress/test/net/sourceforge/pmd/rules/optimizations/xml/UseStringBufferForStringAppends.xml b/pmd/regress/test/net/sourceforge/pmd/rules/optimizations/xml/UseStringBufferForStringAppends.xml index a64ece3744..cc710634b2 100644 --- a/pmd/regress/test/net/sourceforge/pmd/rules/optimizations/xml/UseStringBufferForStringAppends.xml +++ b/pmd/regress/test/net/sourceforge/pmd/rules/optimizations/xml/UseStringBufferForStringAppends.xml @@ -99,6 +99,38 @@ public class Foo{ for (int i = 0; i < 10; i++){ result = result + i; } } +} + ]]> + + + + 0 + + + + + 0 + diff --git a/pmd/src/net/sourceforge/pmd/lang/java/rule/optimizations/UseStringBufferForStringAppendsRule.java b/pmd/src/net/sourceforge/pmd/lang/java/rule/optimizations/UseStringBufferForStringAppendsRule.java index 7f8d56d5eb..4924b09a60 100644 --- a/pmd/src/net/sourceforge/pmd/lang/java/rule/optimizations/UseStringBufferForStringAppendsRule.java +++ b/pmd/src/net/sourceforge/pmd/lang/java/rule/optimizations/UseStringBufferForStringAppendsRule.java @@ -1,6 +1,7 @@ package net.sourceforge.pmd.lang.java.rule.optimizations; import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.java.ast.ASTArgumentList; import net.sourceforge.pmd.lang.java.ast.ASTAssignmentOperator; import net.sourceforge.pmd.lang.java.ast.ASTLocalVariableDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTName; @@ -15,7 +16,7 @@ public class UseStringBufferForStringAppendsRule extends AbstractJavaRule { @Override public Object visit(ASTVariableDeclaratorId node, Object data) { - if (!TypeHelper.isA(node, String.class)) { + if (!TypeHelper.isA(node, String.class) || node.isArray()) { return data; } Node parent = node.jjtGetParent().jjtGetParent(); @@ -28,6 +29,11 @@ public class UseStringBufferForStringAppendsRule extends AbstractJavaRule { if (statement == null) { continue; } + ASTArgumentList argList = name.getFirstParentOfType(ASTArgumentList.class); + if (argList != null && argList.getFirstParentOfType(ASTStatementExpression.class) == statement) { + // used in method call + continue; + } if (statement.jjtGetNumChildren() > 0 && statement.jjtGetChild(0).getClass().equals(ASTPrimaryExpression.class)) { ASTName astName = statement.jjtGetChild(0).getFirstDescendantOfType(ASTName.class); if(astName != null){