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.AbstractRule;
7 import net.sourceforge.pmd.Rule;
8 import net.sourceforge.pmd.ast.ASTStatement;
9 import net.sourceforge.pmd.symboltable.NameOccurrence;
10 import net.sourceforge.pmd.symboltable.VariableNameDeclaration;
11
12 import java.util.Iterator;
13 import java.util.List;
14 import java.util.Map;
15
16 public class SymbolTableTestRule extends AbstractRule implements Rule {
17
18 public Object visit(ASTStatement node, Object data) {
19 Map decls = node.getScope().getVariableDeclarations();
20 for (Iterator i = decls.keySet().iterator(); i.hasNext();) {
21 VariableNameDeclaration decl = (VariableNameDeclaration) i.next();
22
23 List usages = (List) decls.get(decl);
24 if (!isStaticMethodBeingInvoked(usages)) {
25 System.out.println("Error");
26 }
27 }
28 return data;
29 }
30
31 private boolean isStaticMethodBeingInvoked(List usages) {
32 for (Iterator j = usages.iterator(); j.hasNext();) {
33 NameOccurrence nameOccurrence = (NameOccurrence) j.next();
34 if (nameOccurrence.isPartOfQualifiedName()) {
35 System.out.println(nameOccurrence.getNameForWhichThisIsAQualifier().getImage());
36
37
38
39
40
41
42
43
44 }
45 }
46 return false;
47 }
48 }