/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.ecmascript.rule.basic;
import java.util.List;
import net.sourceforge.pmd.lang.ecmascript.ast.ASTFunctionNode;
import net.sourceforge.pmd.lang.ecmascript.ast.ASTReturnStatement;
import net.sourceforge.pmd.lang.ecmascript.rule.AbstractEcmascriptRule;
public class ConsistentReturnRule extends AbstractEcmascriptRule {
public ConsistentReturnRule() {
addRuleChainVisit(ASTFunctionNode.class);
}
@Override
public Object visit(ASTFunctionNode functionNode, Object data) {
List<ASTReturnStatement> returnStatements = functionNode.findDescendantsOfType(ASTReturnStatement.class);
Boolean hasResult = null;
for (ASTReturnStatement returnStatement : returnStatements) {
// Return for this function?
if (functionNode == returnStatement.getFirstParentOfType(ASTFunctionNode.class)) {
if (hasResult == null) {
hasResult = Boolean.valueOf(returnStatement.hasResult());
} else {
// Return has different result from previous return?
if (hasResult.booleanValue() != returnStatement.hasResult()) {
addViolation(data, functionNode);
break;
}
}
}
}
return data;
}
}