01: /*
02: * Hammurapi
03: * Automated Java code review system.
04: * Copyright (C) 2004 Hammurapi Group
05: *
06: * This program is free software; you can redistribute it and/or modify
07: * it under the terms of the GNU General Public License as published by
08: * the Free Software Foundation; either version 2 of the License, or
09: * (at your option) any later version.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: * GNU General Public License for more details.
15: *
16: * You should have received a copy of the GNU General Public License
17: * along with this program; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: *
20: * URL: http://www.hammurapi.org
21: * e-Mail: support@hammurapi.biz
22: */
23: package org.hammurapi.inspectors;
24:
25: import org.hammurapi.InspectorBase;
26:
27: import com.pavelvlasov.config.ConfigurationException;
28: import com.pavelvlasov.config.Parameterizable;
29: import com.pavelvlasov.jsel.Code;
30:
31: /**
32: * ER-048
33: * Method is too long
34: * @author Pavel Vlasov
35: * @version $Revision: 1.4 $
36: */
37: public class CodeTooLongRule extends InspectorBase implements
38: Parameterizable {
39:
40: /**
41: * Reviews the method definitions if they are longer than the preconfigured
42: * maximum.
43: *
44: * @param element the method definition to be reviewed.
45: */
46: public void visit(Code element) {
47: int firstLine = element.getAst().getFirstToken().getLine();
48: int lastLine = element.getAst().getLastToken().getLine();
49:
50: int length = lastLine - firstLine;
51: context.addMetric(element, "Code length", length);
52:
53: if (maxLine != null && length > maxLine.intValue()) {
54: context.reportViolation(element);
55: }
56: }
57:
58: /**
59: * Stores the setting form the configuration for the maximum allowed
60: * linenumber inside of a method.
61: */
62: private Integer maxLine;
63:
64: /**
65: * Configures the rule. Reads in the values of the parameter maximum-line.
66: *
67: * @param name the name of the parameter being loaded from Hammurapi configuration
68: * @param value the value of the parameter being loaded from Hammurapi configuration
69: * @exception ConfigurationException in case of a not supported parameter
70: */
71: public boolean setParameter(String name, Object parameter)
72: throws ConfigurationException {
73: if ("max-lines".equals(name)) {
74: maxLine = (Integer) parameter;
75: return true;
76: } else {
77: throw new ConfigurationException("Parameter '" + name
78: + "' is not supported by " + getClass().getName());
79: }
80: }
81:
82: /**
83: * Gives back the preconfigured values.
84: */
85: public String getConfigInfo() {
86: if (maxLine == null) {
87: return super .getConfigInfo();
88: } else {
89: StringBuffer ret = new StringBuffer(
90: "Allowed maximum line length of the methods:\n");
91: ret.append("max-lines: " + maxLine + "\n");
92: return ret.toString();
93: }
94: }
95: }
|