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

📄 junitassertionsshouldincludemessagerule.java

📁 检查Java程序漏洞
💻 JAVA
字号:
/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html*/package net.sourceforge.pmd.rules.junit;import net.sourceforge.pmd.AbstractRule;import net.sourceforge.pmd.Rule;import net.sourceforge.pmd.RuleContext;import net.sourceforge.pmd.ast.ASTArguments;import net.sourceforge.pmd.ast.ASTName;import net.sourceforge.pmd.ast.ASTPrimaryExpression;import net.sourceforge.pmd.ast.ASTPrimaryPrefix;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class JUnitAssertionsShouldIncludeMessageRule extends AbstractRule implements Rule {    private static class AssertionCall {        public int args;        public String name;        public AssertionCall(int args, String name) {            this.args = args;            this.name = name;        }    }    private List checks = new ArrayList();    public JUnitAssertionsShouldIncludeMessageRule() {        checks.add(new AssertionCall(2, "assertEquals"));        checks.add(new AssertionCall(1, "assertTrue"));        checks.add(new AssertionCall(1, "assertNull"));        checks.add(new AssertionCall(2, "assertSame"));        checks.add(new AssertionCall(1, "assertNotNull"));    }    public Object visit(ASTArguments node, Object data) {        for (Iterator i = checks.iterator(); i.hasNext();) {            AssertionCall call = (AssertionCall) i.next();            check((RuleContext) data, node, call.args, call.name);        }        return super.visit(node, data);    }    private void check(RuleContext ctx, ASTArguments node, int args, String targetMethodName) {        if (node.getArgumentCount() == args && node.jjtGetParent().jjtGetParent() instanceof ASTPrimaryExpression) {            ASTPrimaryExpression primary = (ASTPrimaryExpression) node.jjtGetParent().jjtGetParent();            if (primary.jjtGetChild(0) instanceof ASTPrimaryPrefix && primary.jjtGetChild(0).jjtGetNumChildren() > 0 && primary.jjtGetChild(0).jjtGetChild(0) instanceof ASTName) {                ASTName name = (ASTName) primary.jjtGetChild(0).jjtGetChild(0);                if (name.getImage().equals(targetMethodName)) {                    ctx.getReport().addRuleViolation(createRuleViolation(ctx, name.getBeginLine()));                }            }        }    }}

⌨️ 快捷键说明

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