1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.rules;
5
6 import net.sourceforge.pmd.AbstractRule;
7 import net.sourceforge.pmd.RuleContext;
8 import net.sourceforge.pmd.ast.ASTCompilationUnit;
9 import net.sourceforge.pmd.ast.ASTIfStatement;
10
11 public class AvoidDeeplyNestedIfStmtsRule extends AbstractRule {
12
13 private int depth;
14
15 public Object visit(ASTCompilationUnit node, Object data) {
16 depth = 0;
17 return super.visit(node, data);
18 }
19
20 public Object visit(ASTIfStatement node, Object data) {
21 if (!node.hasElse()) {
22 depth++;
23 }
24 super.visit(node, data);
25 if (depth == getIntProperty("problemDepth")) {
26 RuleContext ctx = (RuleContext) data;
27 ctx.getReport().addRuleViolation(createRuleViolation(ctx, node));
28 }
29 depth--;
30 return data;
31 }
32
33 }