KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > rules > design > ExcessiveNodeCountRule


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package net.sourceforge.pmd.rules.design;
5
6 import net.sourceforge.pmd.ast.SimpleJavaNode;
7 import net.sourceforge.pmd.stat.DataPoint;
8 import net.sourceforge.pmd.stat.StatisticalRule;
9
10 /**
11  * This is a common super class for things which
12  * shouldn't have excessive nodes underneath.
13  * <p/>
14  * It expects all "visit" calls to return an
15  * Integer. It will sum all the values it gets,
16  * and use that as its score.
17  * <p/>
18  * To use it, override the "visit" for the nodes that
19  * need to be counted. On those return "new Integer(1)"
20  * <p/>
21  * All others will return 0 (or the sum of counted nodes
22  * underneath.)
23  */

24
25 public class ExcessiveNodeCountRule extends StatisticalRule {
26     private Class JavaDoc nodeClass;
27
28     public ExcessiveNodeCountRule(Class JavaDoc nodeClass) {
29         this.nodeClass = nodeClass;
30     }
31
32     public Object JavaDoc visit(SimpleJavaNode node, Object JavaDoc data) {
33         int numNodes = 0;
34
35         for (int i = 0; i < node.jjtGetNumChildren(); i++) {
36             Integer JavaDoc treeSize = (Integer JavaDoc) ((SimpleJavaNode) node.jjtGetChild(i)).jjtAccept(this, data);
37             numNodes += treeSize.intValue();
38         }
39
40         if (nodeClass.isInstance(node)) {
41             DataPoint point = new DataPoint();
42             point.setNode(node);
43             point.setScore(1.0 * numNodes);
44             point.setMessage(getMessage());
45             addDataPoint(point);
46         }
47
48         return new Integer JavaDoc(numNodes);
49     }
50 }
51
Popular Tags