📄 junitassertionsshouldincludemessagerule.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 + -