KickJava   Java API By Example, From Geeks To Geeks.

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


1 package net.sourceforge.pmd.rules;
2
3 import net.sourceforge.pmd.AbstractRule;
4 import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration;
5 import net.sourceforge.pmd.ast.ASTFieldDeclaration;
6 import net.sourceforge.pmd.ast.ASTMethodDeclaration;
7 import net.sourceforge.pmd.ast.Node;
8 import net.sourceforge.pmd.ast.SimpleNode;
9
10 public class UnusedModifier extends AbstractRule {
11
12     public Object JavaDoc visit(ASTClassOrInterfaceDeclaration node, Object JavaDoc data) {
13         if (!node.isInterface() && node.isNested() && (node.isPublic() || node.isStatic())) {
14             ASTClassOrInterfaceDeclaration parent = (ASTClassOrInterfaceDeclaration) node.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
15             if (parent != null && parent.isInterface()) {
16                 addViolation(data, node, getMessage());
17             }
18         } else if (node.isInterface() && node.isNested() && (node.isPublic() || node.isStatic())) {
19             ASTClassOrInterfaceDeclaration parent = (ASTClassOrInterfaceDeclaration) node.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
20             if (parent.isInterface() || (!parent.isInterface() && node.isStatic())) {
21                 addViolation(data, node, getMessage());
22             }
23         }
24         return super.visit(node, data);
25     }
26
27     public Object JavaDoc visit(ASTMethodDeclaration node, Object JavaDoc data) {
28         if (node.isSyntacticallyPublic() || node.isSyntacticallyAbstract()) {
29             check(node, data);
30         }
31         return super.visit(node, data);
32     }
33
34     public Object JavaDoc visit(ASTFieldDeclaration node, Object JavaDoc data) {
35         if (node.isSyntacticallyPublic() || node.isSyntacticallyStatic() || node.isSyntacticallyFinal()) {
36             check(node, data);
37         }
38         return super.visit(node, data);
39     }
40
41     private void check(SimpleNode fieldOrMethod, Object JavaDoc data) {
42         // third ancestor could be an AllocationExpression
43
// if this is a method in an anonymous inner class
44
Node parent = fieldOrMethod.jjtGetParent().jjtGetParent().jjtGetParent();
45         if (parent instanceof ASTClassOrInterfaceDeclaration && ((ASTClassOrInterfaceDeclaration) parent).isInterface()) {
46             addViolation(data, fieldOrMethod);
47         }
48     }
49
50 }
51
Popular Tags