gpt4 book ai didi

java - 如何在 pmd 的一条规则中使用两个 AST 节点?

转载 作者:行者123 更新时间:2023-11-30 02:56:55 26 4
gpt4 key购买 nike

我想编写一个使用两个 AST 节点的自定义 PMD 规则。

我的自定义规则扫描源代码以查找数学运算符。

我希望我的规则能够从这些运算符中找到多个运算符

+,*,/, and - 

在相同的表达式中。

我尝试了一些解决方案,但它们不起作用,例如:

public class OperatorPrecednece extends AbstractJavaRule {

Public Object visit(ASTMultiplicativeExpression node, Object data) {


Object tvisi(ASTAdditiveExpression node2, Object data2){
addViolation(data2, node2);


}

return super.visit(node, data);

}
}

如何做到这一点?

最佳答案

我选择了 XPath 而不是 Java。将此规则放入您的 pmd 规则集配置 xml 中:

<rule name="MultipleOperatorsInExpression" language="java" message="More than one different operator used in expression" class="net.sourceforge.pmd.lang.rule.XPathRule">
<properties>
<property name="xpath">
<value>
<![CDATA[
//Expression[.//AdditiveExpression and .//MultiplicativeExpression]
]]>
</value>
</property>
</properties>
</rule>

但这还不是一个完整的解决方案...我正在研究一个可能的 pmd 错误:看起来像 1+2-3+4 这样的表达式得到一个 AdditiveExpression :+ 节点而不是 3 个不同的节点及其各自的运算符,因此检测仅使用 + 和 - 或仅使用 * 和/的表达式将不会被检测到。但它会检测具有混合加法和乘法运算符的表达式。

如果我弄清楚了这一点,我会更新答案,但我希望该规则有一定用处。

关于java - 如何在 pmd 的一条规则中使用两个 AST 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36999525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com