View Javadoc

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  }