View Javadoc
1 package net.sourceforge.pmd.rules; 2 3 import net.sourceforge.pmd.AbstractRule; 4 import net.sourceforge.pmd.RuleContext; 5 import net.sourceforge.pmd.ast.ASTCompilationUnit; 6 import net.sourceforge.pmd.ast.ASTImportDeclaration; 7 import net.sourceforge.pmd.ast.SimpleNode; 8 9 import java.text.MessageFormat; 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 public Object visit(ASTCompilationUnit node, Object data) { 20 RuleContext ctx = (RuleContext) data; 21 singleTypeImports = new HashSet(); 22 importOnDemandImports = new HashSet(); 23 super.visit(node, data); 24 25 // this checks for things like: 26 // import java.io.*; 27 // import java.io.File; 28 for (Iterator i = importOnDemandImports.iterator(); i.hasNext();) { 29 ImportWrapper thisImportOnDemand = (ImportWrapper) i.next(); 30 for (Iterator j = singleTypeImports.iterator(); j.hasNext();) { 31 ImportWrapper thisSingleTypeImport = (ImportWrapper) j.next(); 32 String singleTypePkg = thisSingleTypeImport.getName().substring(0, thisSingleTypeImport.getName().lastIndexOf(".")); 33 if (thisImportOnDemand.getName().equals(singleTypePkg)) { 34 String msg = MessageFormat.format(getMessage(), new Object[]{thisSingleTypeImport.getName()}); 35 ctx.getReport().addRuleViolation(createRuleViolation(ctx, thisSingleTypeImport.getLine(), msg)); 36 } 37 } 38 } 39 singleTypeImports.clear(); 40 importOnDemandImports.clear(); 41 return data; 42 } 43 44 public Object visit(ASTImportDeclaration node, Object data) { 45 ImportWrapper wrapper = new ImportWrapper(node.getImportedNameNode().getImage(), node.getImportedNameNode().getBeginLine()); 46 47 // blahhhh... this really wants to be ASTImportDeclaration to be polymorphic... 48 if (node.isImportOnDemand()) { 49 if (importOnDemandImports.contains(wrapper)) { 50 createRV((RuleContext) data, node.getImportedNameNode()); 51 } else { 52 importOnDemandImports.add(wrapper); 53 } 54 } else { 55 if (singleTypeImports.contains(wrapper)) { 56 createRV((RuleContext) data, node.getImportedNameNode()); 57 } else { 58 singleTypeImports.add(wrapper); 59 } 60 } 61 return data; 62 } 63 64 private void createRV(RuleContext ctx, SimpleNode importNameNode) { 65 String msg = MessageFormat.format(getMessage(), new Object[]{importNameNode.getImage()}); 66 ctx.getReport().addRuleViolation(createRuleViolation(ctx, importNameNode.getBeginLine(), msg)); 67 } 68 }

This page was automatically generated by Maven