1 package net.sourceforge.pmd.rules;
2
3 import net.sourceforge.pmd.AbstractRule;
4 import net.sourceforge.pmd.RuleContext;
5 import net.sourceforge.pmd.ast.ASTCompilationUnit;
6 import net.sourceforge.pmd.ast.ASTImportDeclaration;
7 import net.sourceforge.pmd.ast.ASTName;
8
9 import java.text.MessageFormat;
10 import java.util.HashSet;
11 import java.util.Iterator;
12 import java.util.Set;
13
14 public class UnusedImportsRule extends AbstractRule {
15
16 private Set imports = new HashSet();
17
18 public Object visit(ASTCompilationUnit node, Object data) {
19 imports.clear();
20
21 super.visit(node, data);
22
23 RuleContext ctx = (RuleContext) data;
24 for (Iterator i = imports.iterator(); i.hasNext();) {
25 ImportWrapper wrapper = (ImportWrapper) i.next();
26 String msg = MessageFormat.format(getMessage(), new Object[]{wrapper.getName()});
27 ctx.getReport().addRuleViolation(createRuleViolation(ctx, wrapper.getLine(), msg));
28 }
29 return data;
30 }
31
32 public Object visit(ASTImportDeclaration node, Object data) {
33 if (!node.isImportOnDemand()) {
34 ASTName importedType = (ASTName) node.jjtGetChild(0);
35 String className;
36 if (importedType.getImage().indexOf('.') != -1) {
37 int lastDot = importedType.getImage().lastIndexOf('.') + 1;
38 className = importedType.getImage().substring(lastDot);
39 } else {
40 className = importedType.getImage();
41 }
42 ImportWrapper wrapper = new ImportWrapper(className, node.getBeginLine());
43 imports.add(wrapper);
44 }
45
46 return data;
47 }
48
49 public Object visit(ASTName node, Object data) {
50 String name;
51 if (node.getImage().indexOf('.') == -1) {
52 name = node.getImage();
53 } else {
54 name = node.getImage().substring(0, node.getImage().indexOf('.'));
55 }
56 ImportWrapper candidate = new ImportWrapper(name, -1);
57 if (imports.contains(candidate)) {
58 imports.remove(candidate);
59 }
60 return data;
61 }
62
63
64 }
This page was automatically generated by Maven