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