/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.java.typeresolution.rules.imports; import java.util.Iterator; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.java.ast.ASTImportDeclaration; import net.sourceforge.pmd.lang.java.ast.ASTName; import net.sourceforge.pmd.lang.java.ast.TypeNode; import net.sourceforge.pmd.lang.java.rule.imports.UnusedImportsRule; import net.sourceforge.pmd.lang.rule.ImportWrapper; public class UnusedImports extends UnusedImportsRule { @Override public Object visit(ASTImportDeclaration node, Object data) { if (node.isImportOnDemand()) { ASTName importedType = (ASTName) node.jjtGetChild(0); imports.add(new ImportWrapper(importedType.getImage(), null, node, node.getType(), node.isStatic())); } else { super.visit(node, data); } return data; } @Override protected void check(Node node) { if (imports.isEmpty()) { return; } ImportWrapper candidate = getImportWrapper(node); Iterator<ImportWrapper> it = imports.iterator(); while (it.hasNext()) { ImportWrapper i = it.next(); if (i.matches(candidate)) { it.remove(); return; } } if (TypeNode.class.isAssignableFrom(node.getClass()) && ((TypeNode) node).getType() != null) { Class<?> c = ((TypeNode) node).getType(); if (c.getPackage() != null) { candidate = new ImportWrapper(c.getPackage().getName(), null); if (imports.contains(candidate)) { imports.remove(candidate); } } } } }