View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.lang.ecmascript.rule.basic;
5   
6   import java.util.List;
7   
8   import net.sourceforge.pmd.lang.ecmascript.ast.ASTFunctionNode;
9   import net.sourceforge.pmd.lang.ecmascript.ast.ASTReturnStatement;
10  import net.sourceforge.pmd.lang.ecmascript.rule.AbstractEcmascriptRule;
11  
12  public class ConsistentReturnRule extends AbstractEcmascriptRule {
13  
14      public ConsistentReturnRule() {
15  	addRuleChainVisit(ASTFunctionNode.class);
16      }
17  
18      @Override
19      public Object visit(ASTFunctionNode functionNode, Object data) {
20  	List<ASTReturnStatement> returnStatements = functionNode.findDescendantsOfType(ASTReturnStatement.class);
21  	Boolean hasResult = null;
22  	for (ASTReturnStatement returnStatement : returnStatements) {
23  	    // Return for this function?
24  	    if (functionNode == returnStatement.getFirstParentOfType(ASTFunctionNode.class)) {
25  		if (hasResult == null) {
26  		    hasResult = Boolean.valueOf(returnStatement.hasResult());
27  		} else {
28  		    // Return has different result from previous return?
29  		    if (hasResult.booleanValue() != returnStatement.hasResult()) {
30  			addViolation(data, functionNode);
31  			break;
32  		    }
33  		}
34  	    }
35  	}
36  	return data;
37      }
38  }