⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 duplicateimportsrule.java

📁 检查Java程序漏洞
💻 JAVA
字号:
/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html*/package net.sourceforge.pmd.rules;import net.sourceforge.pmd.AbstractRule;import net.sourceforge.pmd.RuleContext;import net.sourceforge.pmd.ast.ASTCompilationUnit;import net.sourceforge.pmd.ast.ASTImportDeclaration;import net.sourceforge.pmd.ast.SimpleNode;import java.text.MessageFormat;import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class DuplicateImportsRule extends AbstractRule {    private Set singleTypeImports;    private Set importOnDemandImports;    public Object visit(ASTCompilationUnit node, Object data) {        RuleContext ctx = (RuleContext) data;        singleTypeImports = new HashSet();        importOnDemandImports = new HashSet();        super.visit(node, data);        // this checks for things like:        // import java.io.*;        // import java.io.File;        for (Iterator i = importOnDemandImports.iterator(); i.hasNext();) {            ImportWrapper thisImportOnDemand = (ImportWrapper) i.next();            for (Iterator j = singleTypeImports.iterator(); j.hasNext();) {                ImportWrapper thisSingleTypeImport = (ImportWrapper) j.next();                String singleTypePkg = thisSingleTypeImport.getName().substring(0, thisSingleTypeImport.getName().lastIndexOf("."));                if (thisImportOnDemand.getName().equals(singleTypePkg)) {                    String msg = MessageFormat.format(getMessage(), new Object[]{thisSingleTypeImport.getName()});                    ctx.getReport().addRuleViolation(createRuleViolation(ctx, thisSingleTypeImport.getLine(), msg));                }            }        }        singleTypeImports.clear();        importOnDemandImports.clear();        return data;    }    public Object visit(ASTImportDeclaration node, Object data) {        ImportWrapper wrapper = new ImportWrapper(node.getImportedNameNode().getImage(), node.getImportedNameNode().getBeginLine());        // blahhhh... this really wants to be ASTImportDeclaration to be polymorphic...        if (node.isImportOnDemand()) {            if (importOnDemandImports.contains(wrapper)) {                createRV((RuleContext) data, node.getImportedNameNode());            } else {                importOnDemandImports.add(wrapper);            }        } else {            if (singleTypeImports.contains(wrapper)) {                createRV((RuleContext) data, node.getImportedNameNode());            } else {                singleTypeImports.add(wrapper);            }        }        return data;    }    private void createRV(RuleContext ctx, SimpleNode importNameNode) {        String msg = MessageFormat.format(getMessage(), new Object[]{importNameNode.getImage()});        ctx.getReport().addRuleViolation(createRuleViolation(ctx, importNameNode.getBeginLine(), msg));    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -