1
2
3
4 package net.sourceforge.pmd.lang.plsql.rule.design;
5
6 import net.sourceforge.pmd.lang.plsql.ast.PLSQLNode;
7 import net.sourceforge.pmd.lang.plsql.rule.AbstractStatisticalPLSQLRule;
8 import net.sourceforge.pmd.stat.DataPoint;
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public class ExcessiveNodeCountRule extends AbstractStatisticalPLSQLRule {
26 private Class<?> nodeClass;
27
28 public ExcessiveNodeCountRule(Class<?> nodeClass) {
29 this.nodeClass = nodeClass;
30 }
31
32 @Override
33 public Object visit(PLSQLNode node, Object data) {
34 int numNodes = 0;
35
36 for (int i = 0; i < node.jjtGetNumChildren(); i++) {
37 Integer treeSize = (Integer) ((PLSQLNode) node.jjtGetChild(i)).jjtAccept(this, data);
38 numNodes += treeSize;
39 }
40
41 if (nodeClass.isInstance(node)) {
42 DataPoint point = new DataPoint();
43 point.setNode(node);
44 point.setScore(1.0 * numNodes);
45 point.setMessage(getMessage());
46 addDataPoint(point);
47 }
48
49 return Integer.valueOf(numNodes);
50 }
51 }