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