View Javadoc
1 package net.sourceforge.pmd.rules.design; 2 3 import net.sourceforge.pmd.AbstractRule; 4 import net.sourceforge.pmd.RuleContext; 5 import net.sourceforge.pmd.ast.ASTInterfaceDeclaration; 6 import net.sourceforge.pmd.ast.ASTMethodDeclaration; 7 import net.sourceforge.pmd.ast.ASTReturnStatement; 8 import net.sourceforge.pmd.ast.SimpleNode; 9 10 import java.util.ArrayList; 11 import java.util.Iterator; 12 import java.util.List; 13 14 public class OnlyOneReturnRule extends AbstractRule { 15 16 public Object visit(ASTInterfaceDeclaration node, Object data) { 17 return data; 18 } 19 20 public Object visit(ASTMethodDeclaration node, Object data) { 21 if (node.isAbstract()) { 22 return data; 23 } 24 25 List returnNodes = new ArrayList(); 26 node.findChildrenOfType(ASTReturnStatement.class, returnNodes, false); 27 if (returnNodes.size() > 1) { 28 RuleContext ctx = (RuleContext) data; 29 for (Iterator i = returnNodes.iterator(); i.hasNext();) { 30 SimpleNode problem = (SimpleNode) i.next(); 31 // skip the last one, it's OK 32 if (!i.hasNext()) { 33 continue; 34 } 35 ctx.getReport().addRuleViolation(createRuleViolation(ctx, problem.getBeginLine())); 36 } 37 } 38 return data; 39 } 40 41 }

This page was automatically generated by Maven