1 /**
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.typeresolution.rules.imports;
5
6 import net.sourceforge.pmd.ast.ASTImportDeclaration;
7 import net.sourceforge.pmd.ast.ASTName;
8 import net.sourceforge.pmd.ast.SimpleJavaNode;
9 import net.sourceforge.pmd.ast.SimpleNode;
10 import net.sourceforge.pmd.ast.TypeNode;
11 import net.sourceforge.pmd.rules.ImportWrapper;
12 import net.sourceforge.pmd.rules.imports.UnusedImportsRule;
13
14 public class UnusedImports extends UnusedImportsRule {
15
16 public Object visit(ASTImportDeclaration node, Object data) {
17 if (node.isImportOnDemand()) {
18 ASTName importedType = (ASTName) node.jjtGetChild(0);
19 imports.add(new ImportWrapper(importedType.getImage(), null, node));
20 } else {
21 super.visit(node, data);
22 }
23 return data;
24 }
25
26 protected void check(SimpleNode node) {
27 if (imports.isEmpty()) {
28 return;
29 }
30 ImportWrapper candidate = getImportWrapper(node);
31 if (imports.contains(candidate)) {
32 imports.remove(candidate);
33 return;
34 }
35 if (TypeNode.class.isAssignableFrom(node.getClass()) && ((TypeNode) node).getType() != null) {
36 Class c = ((TypeNode) node).getType();
37 if (c.getPackage() != null) {
38 candidate = new ImportWrapper(c.getPackage().getName(), null, new SimpleJavaNode(-1));
39 if (imports.contains(candidate)) {
40 imports.remove(candidate);
41 }
42 }
43 }
44 }
45 }