ExcessiveLengthRule.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.lang.java.rule.design;
05 
06 import net.sourceforge.pmd.lang.java.ast.JavaNode;
07 import net.sourceforge.pmd.lang.java.rule.AbstractStatisticalJavaRule;
08 import net.sourceforge.pmd.stat.DataPoint;
09 
10 /**
11  * This is a common super class for things which
12  * have excessive length.
13  <p/>
14  * i.e. LongMethod and LongClass rules.
15  <p/>
16  * To implement an ExcessiveLength rule, you pass
17  * in the Class of node you want to check, and this
18  * does the rest for you.
19  */
20 public class ExcessiveLengthRule extends AbstractStatisticalJavaRule {
21     private Class<?> nodeClass;
22 
23     public ExcessiveLengthRule(Class<?> nodeClass) {
24   this.nodeClass = nodeClass;
25     }
26 
27     @Override
28     public Object visit(JavaNode node, Object data) {
29   if (nodeClass.isInstance(node)) {
30       DataPoint point = new DataPoint();
31       point.setNode(node);
32       point.setScore(1.0 (node.getEndLine() - node.getBeginLine()));
33       point.setMessage(getMessage());
34       addDataPoint(point);
35   }
36 
37   return node.childrenAccept(this, data);
38     }
39 }