refactoring

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@694 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Tom Copeland
2002-08-14 19:31:33 +00:00
parent b3dd6313d6
commit 7005eb2eed

View File

@ -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);
}