diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UnnecessaryLocalBeforeReturnRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UnnecessaryLocalBeforeReturnRule.java index 5dc882ab03..855e19ff0b 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UnnecessaryLocalBeforeReturnRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/UnnecessaryLocalBeforeReturnRule.java @@ -6,8 +6,8 @@ package net.sourceforge.pmd.lang.java.rule.design; import java.util.List; import java.util.Map; +import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTAssertStatement; -import net.sourceforge.pmd.lang.java.ast.ASTBlock; import net.sourceforge.pmd.lang.java.ast.ASTBlockStatement; import net.sourceforge.pmd.lang.java.ast.ASTExpression; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; @@ -94,22 +94,22 @@ public class UnnecessaryLocalBeforeReturnRule extends AbstractJavaRule { * @return */ private boolean hasAssertStatement(VariableNameDeclaration variableDeclaration, ASTReturnStatement rtn) { - boolean hasAssert = false; ASTBlockStatement blockStatement = variableDeclaration.getAccessNodeParent().getFirstParentOfType(ASTBlockStatement.class); int startIndex = blockStatement.jjtGetChildIndex() + 1; int endIndex = rtn.getFirstParentOfType(ASTBlockStatement.class).jjtGetChildIndex(); - ASTBlock block = (ASTBlock)blockStatement.jjtGetParent(); + Node block = blockStatement.jjtGetParent(); for (int i = startIndex; i < endIndex; i++) { List asserts = block.jjtGetChild(i).findDescendantsOfType(ASTAssertStatement.class); for (ASTAssertStatement assertStatement : asserts) { List names = assertStatement.findDescendantsOfType(ASTName.class); for (ASTName n : names) { if (n.hasImageEqualTo(variableDeclaration.getName())) { - hasAssert = true; + return true; } } } } - return hasAssert; + + return false; } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UnnecessaryLocalBeforeReturn.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UnnecessaryLocalBeforeReturn.xml index 15297a73e9..cd473e0759 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UnnecessaryLocalBeforeReturn.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/UnnecessaryLocalBeforeReturn.xml @@ -75,6 +75,22 @@ public class Foo { int res = 2; assert res>=0; return res; } +} + ]]> + + + + #219 ClassCastException in switch case with local variable returned + 1 + diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index a9bdb48b74..ca92321b54 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -18,6 +18,8 @@ The PMD team is pleased to announce PMD 5.5.4 ### Fixed Issues +* java-design + * [#219](https://github.com/pmd/pmd/issues/219): \[java] UnnecessaryLocalBeforeReturn: ClassCastException in switch case with local variable returned * java-optimizations * [#215](https://github.com/pmd/pmd/issues/215): \[java] RedundantFieldInitializer report for annotation field not explicitly marked as final