View Javadoc

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  // how do i get the method access node here?
38  
39  /*
40  if(method is static) {
41  return true;
42  }
43  */
44              }
45          }
46          return false;
47      }
48  }