主要涉及三部分
第一部分
package com.alibaba.p3c.pmd.lang.java.rule.extend;
import com.alibaba.p3c.pmd.lang.java.rule.AbstractAliRule;
import net.sourceforge.pmd.lang.java.ast.ASTFormalParameters;
/**
* @author steven
* @date 2021/11/24
*/
public class MethodParamsNumRule extends AbstractAliRule {
private static final int PARAMSNUM = 5;
@Override
public Object visit(ASTFormalParameters node, Object data) {
if (node.jjtGetNumChildren() > PARAMSNUM) {
addViolationWithMessage(data, node, "java.extend.MethodParamsNumRule.rule.msg");
}
;
return super.visit(node, data);
}
}
第二部分
<?xml version="1.0"?>
<ruleset name="AlibabaJavaExtends" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>AlibabaJavaExtends</description>
<!-- 方法的参数 -->
<rule name="MethodParamsNumRule"
language="java"
message="java.extend.MethodParamsNumRule.rule.msg"
class="com.alibaba.p3c.pmd.lang.java.rule.extend.MethodParamsNumRule">
<priority>2</priority>
<example>
<![CDATA[
public class Example {
public void fn(int a, int b, int c,int d, int f, int g) {
dosomething();
}
}
]]>
</example>
</rule>
</ruleset>
第三部分
<!--extend-->
<entry key="java.extend.MethodParamsNumRule.rule.msg">
<![CDATA[方法入参超过5个,请以对象方式传入!]]>
</entry>
<!--extend-->
<entry key="java.extend.MethodParamsNumRule.rule.msg">
<![CDATA[method params are more than 5!]]>
</entry>
打包:mvn clean package -Dmaven.test.skip=true
验证
拷贝至某一目录
java -cp p3c-pmd-2.1.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d ./ -R rulesets/java/ali-extend.xml
效果: