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