Clover coverage report - PMD - 3.3
Coverage timestamp: Thu Sep 15 2005 17:59:57 EDT
file stats: LOC: 62   Methods: 2
NCLOC: 46   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
DuplicateImportsRule.java 100% 100% 100% 100%
coverage
 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.ast.ASTCompilationUnit;
 8    import net.sourceforge.pmd.ast.ASTImportDeclaration;
 9   
 10    import java.util.HashSet;
 11    import java.util.Iterator;
 12    import java.util.Set;
 13   
 14    public class DuplicateImportsRule extends AbstractRule {
 15   
 16    private Set singleTypeImports;
 17    private Set importOnDemandImports;
 18   
 19  4 public Object visit(ASTCompilationUnit node, Object data) {
 20  4 singleTypeImports = new HashSet();
 21  4 importOnDemandImports = new HashSet();
 22  4 super.visit(node, data);
 23   
 24    // this checks for things like:
 25    // import java.io.*;
 26    // import java.io.File;
 27  4 for (Iterator i = importOnDemandImports.iterator(); i.hasNext();) {
 28  7 ImportWrapper thisImportOnDemand = (ImportWrapper) i.next();
 29  7 for (Iterator j = singleTypeImports.iterator(); j.hasNext();) {
 30  4 ImportWrapper thisSingleTypeImport = (ImportWrapper) j.next();
 31  4 String singleTypePkg = thisSingleTypeImport.getName().substring(0, thisSingleTypeImport.getName().lastIndexOf("."));
 32  4 if (thisImportOnDemand.getName().equals(singleTypePkg)) {
 33  1 addViolation(data, thisSingleTypeImport.getNode(), thisSingleTypeImport.getName());
 34    }
 35    }
 36    }
 37  4 singleTypeImports.clear();
 38  4 importOnDemandImports.clear();
 39  4 return data;
 40    }
 41   
 42  11 public Object visit(ASTImportDeclaration node, Object data) {
 43  11 ImportWrapper wrapper = new ImportWrapper(node.getImportedName(), node.getImportedName(), node.getImportedNameNode());
 44   
 45    // blahhhh... this really wants to be ASTImportDeclaration to be polymorphic...
 46  11 if (node.isImportOnDemand()) {
 47  8 if (importOnDemandImports.contains(wrapper)) {
 48  1 addViolation(data, node.getImportedNameNode(), node.getImportedNameNode().getImage());
 49    } else {
 50  7 importOnDemandImports.add(wrapper);
 51    }
 52    } else {
 53  3 if (singleTypeImports.contains(wrapper)) {
 54  1 addViolation(data, node.getImportedNameNode(), node.getImportedNameNode().getImage());
 55    } else {
 56  2 singleTypeImports.add(wrapper);
 57    }
 58    }
 59  11 return data;
 60    }
 61   
 62    }