View Javadoc

1   package net.sourceforge.pmd.jsp.rules;
2   
3   import net.sourceforge.pmd.RuleContext;
4   import net.sourceforge.pmd.jsp.ast.ASTJspDirectiveAttribute;
5   import net.sourceforge.pmd.rules.ImportWrapper;
6   
7   import java.util.HashSet;
8   import java.util.List;
9   import java.util.Set;
10  import java.util.StringTokenizer;
11  
12  public class DuplicateJspImports extends AbstractJspRule {
13  
14      private Set<ImportWrapper> imports = new HashSet<ImportWrapper>();
15  
16      public void apply(List acus, RuleContext ctx) {
17          /*
18           * TODO: This method is a hack! It's overriding the parent's method
19           * because the JSP parsing doesn't seem to hit ASTCompilationUnit
20           * properly
21           */
22          imports.clear();
23          super.apply(acus, ctx);
24      }
25  
26      public Object visit(ASTJspDirectiveAttribute node, Object data) {
27  
28          if (!"import".equals(node.getName())) {
29              return super.visit(node, data);
30          }
31          String values = node.getValue();
32          StringTokenizer st = new StringTokenizer(values, ",");
33          int count = st.countTokens();
34          for (int ix = 0; ix < count; ix++) {
35              String token = st.nextToken();
36              ImportWrapper wrapper = new ImportWrapper(token, token, node);
37              if (imports.contains(wrapper)) {
38                  addViolation(data, node, node.getImage());
39              } else {
40                  imports.add(wrapper);
41              }
42          }
43          return super.visit(node, data);
44      }
45  
46  }