refactoring
git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@694 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
@ -34,50 +34,51 @@ public class SimplifyBooleanReturnsRule extends AbstractRule {
|
||||
// return true;
|
||||
// else
|
||||
// return false;
|
||||
|
||||
// second case
|
||||
// If
|
||||
// Expr
|
||||
// Statement
|
||||
// Block
|
||||
// BlockStatement
|
||||
// Statement
|
||||
// ReturnStatement
|
||||
// Statement
|
||||
// Block
|
||||
// BlockStatement
|
||||
// Statement
|
||||
// ReturnStatement
|
||||
// i.e.,
|
||||
// if (foo) {
|
||||
// return true;
|
||||
// } else {
|
||||
// return false;
|
||||
// }
|
||||
if (node.jjtGetChild(1).jjtGetChild(0) instanceof ASTReturnStatement
|
||||
&& node.jjtGetChild(2).jjtGetChild(0) instanceof ASTReturnStatement
|
||||
&& terminatesInBooleanLiteral((SimpleNode)node.jjtGetChild(1).jjtGetChild(0))
|
||||
&& terminatesInBooleanLiteral((SimpleNode)node.jjtGetChild(2).jjtGetChild(0))) {
|
||||
RuleContext ctx = (RuleContext)data;
|
||||
ctx.getReport().addRuleViolation(createRuleViolation(ctx, node.getBeginLine()));
|
||||
} else if (node.jjtGetChild(1).jjtGetChild(0) instanceof ASTBlock
|
||||
&& node.jjtGetChild(1).jjtGetChild(0).jjtGetNumChildren() == 1
|
||||
&& node.jjtGetChild(1).jjtGetChild(0).jjtGetChild(0) instanceof ASTBlockStatement
|
||||
&& node.jjtGetChild(1).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0) instanceof ASTStatement
|
||||
&& node.jjtGetChild(1).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0) instanceof ASTReturnStatement
|
||||
&& node.jjtGetChild(2).jjtGetChild(0) instanceof ASTBlock
|
||||
&& node.jjtGetChild(2).jjtGetChild(0).jjtGetNumChildren() == 1
|
||||
&& node.jjtGetChild(2).jjtGetChild(0).jjtGetChild(0) instanceof ASTBlockStatement
|
||||
&& node.jjtGetChild(2).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0) instanceof ASTStatement
|
||||
&& node.jjtGetChild(2).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0) instanceof ASTReturnStatement
|
||||
} else
|
||||
if (hasOneBlockStmt((SimpleNode)node.jjtGetChild(1)) && hasOneBlockStmt((SimpleNode)node.jjtGetChild(2))
|
||||
&& terminatesInBooleanLiteral((SimpleNode)node.jjtGetChild(1).jjtGetChild(0))
|
||||
&& terminatesInBooleanLiteral((SimpleNode)node.jjtGetChild(2).jjtGetChild(0))) {
|
||||
RuleContext ctx = (RuleContext)data;
|
||||
ctx.getReport().addRuleViolation(createRuleViolation(ctx, node.getBeginLine()));
|
||||
// second case
|
||||
// If
|
||||
// Expr
|
||||
// Statement
|
||||
// Block
|
||||
// BlockStatement
|
||||
// Statement
|
||||
// ReturnStatement
|
||||
// Statement
|
||||
// Block
|
||||
// BlockStatement
|
||||
// Statement
|
||||
// ReturnStatement
|
||||
// i.e.,
|
||||
// if (foo) {
|
||||
// return true;
|
||||
// } else {
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
|
||||
return super.visit(node, data);
|
||||
}
|
||||
|
||||
private boolean hasOneBlockStmt(SimpleNode node) {
|
||||
return node.jjtGetChild(0) instanceof ASTBlock
|
||||
&& node.jjtGetChild(0).jjtGetNumChildren() == 1
|
||||
&& node.jjtGetChild(0).jjtGetChild(0) instanceof ASTBlockStatement
|
||||
&& node.jjtGetChild(0).jjtGetChild(0).jjtGetChild(0) instanceof ASTStatement
|
||||
&& node.jjtGetChild(0).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0) instanceof ASTReturnStatement;
|
||||
}
|
||||
|
||||
private boolean terminatesInBooleanLiteral(SimpleNode node) {
|
||||
return eachNodeHasOneChild(node) && (getLastChild(node) instanceof ASTBooleanLiteral);
|
||||
}
|
||||
|
Reference in New Issue
Block a user