1 4 package net.sourceforge.pmd.rules.imports; 5 6 import net.sourceforge.pmd.AbstractRule; 7 import net.sourceforge.pmd.ast.ASTClassOrInterfaceType; 8 import net.sourceforge.pmd.ast.ASTCompilationUnit; 9 import net.sourceforge.pmd.ast.ASTImportDeclaration; 10 import net.sourceforge.pmd.ast.ASTName; 11 import net.sourceforge.pmd.ast.SimpleJavaNode; 12 import net.sourceforge.pmd.ast.SimpleNode; 13 import net.sourceforge.pmd.rules.ImportWrapper; 14 15 import java.util.HashSet ; 16 import java.util.Iterator ; 17 import java.util.Set ; 18 19 public class UnusedImportsRule extends AbstractRule { 20 21 private Set imports = new HashSet (); 22 23 public Object visit(ASTCompilationUnit node, Object data) { 24 imports.clear(); 25 super.visit(node, data); 26 for (Iterator i = imports.iterator(); i.hasNext();) { 27 ImportWrapper wrapper = (ImportWrapper) i.next(); 28 addViolation(data, wrapper.getNode(), wrapper.getFullName()); 29 } 30 return data; 31 } 32 33 public Object visit(ASTImportDeclaration node, Object data) { 34 if (!node.isImportOnDemand()) { 35 ASTName importedType = (ASTName) node.jjtGetChild(0); 36 String className; 37 if (isQualifiedName(importedType)) { 38 int lastDot = importedType.getImage().lastIndexOf('.') + 1; 39 className = importedType.getImage().substring(lastDot); 40 } else { 41 className = importedType.getImage(); 42 } 43 imports.add(new ImportWrapper(importedType.getImage(), className, node)); 44 } 45 46 return data; 47 } 48 49 public Object visit(ASTClassOrInterfaceType node, Object data) { 50 check(node); 51 return super.visit(node, data); 52 } 53 54 public Object visit(ASTName node, Object data) { 55 check(node); 56 return data; 57 } 58 59 private void check(SimpleNode node) { 60 String name; 61 if (!isQualifiedName(node)) { 62 name = node.getImage(); 63 } else { 64 name = node.getImage().substring(0, node.getImage().indexOf('.')); 65 } 66 ImportWrapper candidate = new ImportWrapper(node.getImage(), name, new SimpleJavaNode(-1)); 67 if (imports.contains(candidate)) { 68 imports.remove(candidate); 69 } 70 } 71 } 72 | Popular Tags |