KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > rules > AvoidDeeplyNestedIfStmtsRule


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 java.util.Map JavaDoc;
7
8 import net.sourceforge.pmd.AbstractRule;
9 import net.sourceforge.pmd.PropertyDescriptor;
10 import net.sourceforge.pmd.ast.ASTCompilationUnit;
11 import net.sourceforge.pmd.ast.ASTIfStatement;
12 import net.sourceforge.pmd.properties.IntegerProperty;
13
14 public class AvoidDeeplyNestedIfStmtsRule extends AbstractRule {
15
16     private int depth;
17     private int depthLimit;
18     
19     private static final PropertyDescriptor problemDepthDescriptor = new IntegerProperty(
20             "problemDepth",
21             "Maximum allowable statement depth",
22             0,
23             1.0f
24             );
25     
26     private static final Map JavaDoc propertyDescriptorsByName = asFixedMap(problemDepthDescriptor);
27         
28     public Object JavaDoc visit(ASTCompilationUnit node, Object JavaDoc data) {
29         depth = 0;
30         depthLimit = getIntProperty(problemDepthDescriptor);
31         return super.visit(node, data);
32     }
33
34     public Object JavaDoc visit(ASTIfStatement node, Object JavaDoc data) {
35         if (!node.hasElse()) {
36             depth++;
37         }
38         super.visit(node, data);
39         if (depth == depthLimit) {
40             addViolation(data, node);
41         }
42         depth--;
43         return data;
44     }
45
46     /**
47      * @return Map
48      */

49     protected Map JavaDoc propertiesByName() {
50         return propertyDescriptorsByName;
51     }
52 }
53
Popular Tags