forked from phoedos/pmd
Fixed bug 2056318 - False positive for AvoidInstantiatingObjectsInLoops
git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/branches/pmd/4.2.x@6370 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
@ -8,6 +8,7 @@ Fixed bug 1989814 - false +: ConsecutiveLiteralAppends
|
|||||||
Fixed bug 1977230 - false positive: UselessOverridingMethod
|
Fixed bug 1977230 - false positive: UselessOverridingMethod
|
||||||
Fixed bug 1998185 - BeanMembersShouldSerialize vs @SuppressWarnings("serial")
|
Fixed bug 1998185 - BeanMembersShouldSerialize vs @SuppressWarnings("serial")
|
||||||
Fixed bug 2002722 - false + in UseStringBufferForStringAppends
|
Fixed bug 2002722 - false + in UseStringBufferForStringAppends
|
||||||
|
Fixed bug 2056318 - False positive for AvoidInstantiatingObjectsInLoops
|
||||||
Optimizations and false positive fixes in PreserveStackTrace
|
Optimizations and false positive fixes in PreserveStackTrace
|
||||||
@SuppressWarnings("all") disables all warnings
|
@SuppressWarnings("all") disables all warnings
|
||||||
|
|
||||||
|
@ -88,6 +88,22 @@ public class Foo {
|
|||||||
return new String();
|
return new String();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
<test-code>
|
||||||
|
<description><![CDATA[
|
||||||
|
[ 2056318 ] False positive for AvoidInstantiatingObjectsInLoops
|
||||||
|
]]></description>
|
||||||
|
<expected-problems>0</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
public class Foo {
|
||||||
|
public void test1() {
|
||||||
|
Object o;
|
||||||
|
int i;
|
||||||
|
for(o = new Object(), i = 0; i < 10; i++) {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
@ -5,10 +5,12 @@ package net.sourceforge.pmd.rules.optimization;
|
|||||||
|
|
||||||
import net.sourceforge.pmd.ast.ASTAllocationExpression;
|
import net.sourceforge.pmd.ast.ASTAllocationExpression;
|
||||||
import net.sourceforge.pmd.ast.ASTDoStatement;
|
import net.sourceforge.pmd.ast.ASTDoStatement;
|
||||||
|
import net.sourceforge.pmd.ast.ASTForInit;
|
||||||
import net.sourceforge.pmd.ast.ASTForStatement;
|
import net.sourceforge.pmd.ast.ASTForStatement;
|
||||||
import net.sourceforge.pmd.ast.ASTReturnStatement;
|
import net.sourceforge.pmd.ast.ASTReturnStatement;
|
||||||
import net.sourceforge.pmd.ast.ASTThrowStatement;
|
import net.sourceforge.pmd.ast.ASTThrowStatement;
|
||||||
import net.sourceforge.pmd.ast.ASTWhileStatement;
|
import net.sourceforge.pmd.ast.ASTWhileStatement;
|
||||||
|
import net.sourceforge.pmd.ast.Node;
|
||||||
|
|
||||||
public class AvoidInstantiatingObjectsInLoops extends AbstractOptimizationRule {
|
public class AvoidInstantiatingObjectsInLoops extends AbstractOptimizationRule {
|
||||||
|
|
||||||
@ -28,14 +30,21 @@ public class AvoidInstantiatingObjectsInLoops extends AbstractOptimizationRule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean insideLoop(ASTAllocationExpression node) {
|
private boolean insideLoop(ASTAllocationExpression node) {
|
||||||
if (node.getFirstParentOfType(ASTDoStatement.class) != null) {
|
Node n = node.jjtGetParent();
|
||||||
return true;
|
while (n != null) {
|
||||||
}
|
if (n instanceof ASTDoStatement ||
|
||||||
if (node.getFirstParentOfType(ASTWhileStatement.class) != null) {
|
n instanceof ASTWhileStatement ||
|
||||||
return true;
|
n instanceof ASTForStatement) {
|
||||||
}
|
return true;
|
||||||
if (node.getFirstParentOfType(ASTForStatement.class) != null) {
|
} else if (n instanceof ASTForInit) {
|
||||||
return true;
|
/*
|
||||||
|
* init part is not technically inside the loop.
|
||||||
|
* Skip parent ASTForStatement but continue higher
|
||||||
|
* up to detect nested loops
|
||||||
|
*/
|
||||||
|
n = n.jjtGetParent();
|
||||||
|
}
|
||||||
|
n = n.jjtGetParent();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user