1 4 package net.sourceforge.pmd.rules; 5 6 import java.util.Map ; 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 propertyDescriptorsByName = asFixedMap(problemDepthDescriptor); 27 28 public Object visit(ASTCompilationUnit node, Object data) { 29 depth = 0; 30 depthLimit = getIntProperty(problemDepthDescriptor); 31 return super.visit(node, data); 32 } 33 34 public Object visit(ASTIfStatement node, Object 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 49 protected Map propertiesByName() { 50 return propertyDescriptorsByName; 51 } 52 } 53 | Popular Tags |