KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > rules > ExcessivePublicCount


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

4 package net.sourceforge.pmd.rules;
5
6 import net.sourceforge.pmd.ast.ASTCompilationUnit;
7 import net.sourceforge.pmd.ast.ASTFieldDeclaration;
8 import net.sourceforge.pmd.ast.ASTMethodDeclarator;
9 import net.sourceforge.pmd.ast.AccessNode;
10 import net.sourceforge.pmd.rules.design.ExcessiveNodeCountRule;
11 import net.sourceforge.pmd.util.NumericConstants;
12
13 /**
14  * @author aglover
15  * <p/>
16  * Class Name: ExcessivePublicCount
17  * <p/>
18  * Rule attempts to count all public methods and public attributes defined in a class.
19  * <p/>
20  * If a class has a high number of public operations, it might be wise to consider whether
21  * it would be appropriate to divide it into subclasses.
22  * <p/>
23  * A large proportion of public members and operations means the class has high potential to be
24  * affected by external classes. Futhermore, increased effort will be required to
25  * thoroughly test the class.
26  */

27 public class ExcessivePublicCount extends ExcessiveNodeCountRule {
28
29     public ExcessivePublicCount() {
30         super(ASTCompilationUnit.class);
31     }
32
33     /**
34      * Method counts ONLY public methods.
35      */

36     public Object JavaDoc visit(ASTMethodDeclarator node, Object JavaDoc data) {
37         return this.getTallyOnAccessType((AccessNode) node.jjtGetParent());
38     }
39
40     /**
41      * Method counts ONLY public class attributes which are not PUBLIC and
42      * static- these usually represent constants....
43      */

44     public Object JavaDoc visit(ASTFieldDeclaration node, Object JavaDoc data) {
45         if (node.isFinal() && node.isStatic()) {
46             return NumericConstants.ZERO;
47         }
48         return this.getTallyOnAccessType(node);
49     }
50
51     /**
52      * Method counts a node if it is public
53      *
54      * @param AccessNode node
55      * @return Integer 1 if node is public 0 otherwise
56      */

57     private Integer JavaDoc getTallyOnAccessType(AccessNode node) {
58         if (node.isPublic()) {
59             return NumericConstants.ONE;
60         }
61         return NumericConstants.ZERO;
62     }
63 }
64
Popular Tags