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.SimpleNode; 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 * 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 StatisticalRule { 21 private Class nodeClass; 22 23 public ExcessiveLengthRule(Class nodeClass) { 24 this.nodeClass = nodeClass; 25 } 26 27 public Object visit(SimpleNode node, Object data) { 28 if (nodeClass.isInstance(node)) { 29 DataPoint point = new DataPoint(); 30 point.setLineNumber(node.getBeginLine()); 31 point.setScore(1.0 * (node.getEndLine() - node.getBeginLine())); 32 point.setMessage(getMessage()); 33 addDataPoint(point); 34 } 35 36 return node.childrenAccept(this, data); 37 } 38 } 39 40