diff --git a/pmd/etc/changelog.txt b/pmd/etc/changelog.txt index 23a41e7868..3cc4f8f43b 100644 --- a/pmd/etc/changelog.txt +++ b/pmd/etc/changelog.txt @@ -10,6 +10,7 @@ Fixed bug 1373510 - UseAssertSameInsteadOfAssertTrue no longer has a typo in its Fixed bug 1375290 - @SuppressWarnings annotations are now implemented correctly; they accept one blank argument to suppress all warnings. Fixed bug 1376760 - InefficientStringBuffering no longer throws a NullPointerException when processing certain expressions. Fixed bug 1376756 - UselessOverridingMethod no longer throws an exception on overloaded methods. +Fixed bug 1378358 - StringInstantiation no longer throws ClassCastExceptions on certain allocation patterns. Fixed a bug in UseStringBufferLength; it no longers fails with an exception on expressions like StringBuffer.toString.equals(x) Partially fixed bug 1371753 - UnnecessaryLocalBeforeReturn message now reflects the fact that that rule flags all types Modified renderers to support disabling printing of suppressed warnings. Introduced a new AbstractRenderer class that all Renderers can extends to get the current behavior - that is, suppressed violations are printed. diff --git a/pmd/src/net/sourceforge/pmd/rules/strings/StringInstantiation.java b/pmd/src/net/sourceforge/pmd/rules/strings/StringInstantiation.java index 3e081ed60d..5e21c53263 100644 --- a/pmd/src/net/sourceforge/pmd/rules/strings/StringInstantiation.java +++ b/pmd/src/net/sourceforge/pmd/rules/strings/StringInstantiation.java @@ -8,6 +8,7 @@ import net.sourceforge.pmd.ast.ASTClassOrInterfaceType; import net.sourceforge.pmd.ast.ASTExpression; import net.sourceforge.pmd.ast.ASTName; import net.sourceforge.pmd.symboltable.VariableNameDeclaration; +import net.sourceforge.pmd.symboltable.NameDeclaration; import java.util.List; @@ -39,9 +40,14 @@ public class StringInstantiation extends AbstractRule { return data; } - VariableNameDeclaration nd = (VariableNameDeclaration)name.getNameDeclaration(); + NameDeclaration nd = (NameDeclaration)name.getNameDeclaration(); + if (!(nd instanceof VariableNameDeclaration)) { + return data; + } + + VariableNameDeclaration vnd = (VariableNameDeclaration)nd; // nd == null in cases like: return new String("foo"); - if (nd == null || nd.getTypeImage().equals("String")) { + if (vnd == null || vnd.getTypeImage().equals("String")) { addViolation(data, node); } diff --git a/pmd/xdocs/credits.xml b/pmd/xdocs/credits.xml index 6d4aa3b91f..a03a15aa4d 100644 --- a/pmd/xdocs/credits.xml +++ b/pmd/xdocs/credits.xml @@ -45,8 +45,8 @@