在PMD中设置XPath冲突抑制
我正在PMD中设置自定义规则,但在不使用不推荐的功能的情况下,很难使XPath抑制生效。我使用的是PMD 6.32 我的规则是修改在PMD中设置XPath冲突抑制,xpath,pmd,Xpath,Pmd,我正在PMD中设置自定义规则,但在不使用不推荐的功能的情况下,很难使XPath抑制生效。我使用的是PMD 6.32 我的规则是修改Java/Codestyle规则集中的规则ShortVariable: <rule ref="category/java/codestyle.xml/ShortVariable"> <properties> <!-- ignore ID --> &l
Java/Codestyle
规则集中的规则ShortVariable
:
<rule ref="category/java/codestyle.xml/ShortVariable">
<properties>
<!-- ignore ID -->
<property name="violationSuppressXPath" value="//VariableDeclaratorId[@Image='id']"/>
</properties>
</rule>
我面临两个问题:
java.lang.RuntimeException:在带有XPath导航的FindChildNodes中使用不推荐的属性“VariableDeclaratorId/@Image”,请改用@Name
。但是,当我将@Image
的任何实例更改为@Name
时,检查失败id
,则禁止使用它。相反,如果有一个名为id
的字段,它将抑制类中所有变量的规则。规则应该是什么id
规则未正确应用的问题:
但是,在将@Image
的实例更改为@Name
之后,其他一些支持根本没有被应用:
应该禁止使用方法名hashCode
或等于的规则,但不是
应禁止在名称以Repository
结尾但不是
应该在主方法中取消对方法的规则,但是正在取消对其他方法和应用程序类的规则至于您的问题:
替换是正确的,除了弃用之外,两者之间没有区别,实际上:
/**
*@不推荐使用{@link#getName()}
*@返回
*/
@凌驾
@弃用属性(替换为=“@Name”)
@不赞成
公共字符串getImage(){
返回getName();
}
/**返回变量的名称*/
公共字符串getName(){
返回super.getImage();
}
根据:
注意使用
引用上下文节点。应该避免在表达式的开头使用/
,因为它将测试文件中的所有节点,并抑制比预期更多的冲突
因此,您只需使用:
关于您的问题:
替换是正确的,除了弃用之外,两者之间没有区别,实际上:
/**
*@不推荐使用{@link#getName()}
*@返回
*/
@凌驾
@弃用属性(替换为=“@Name”)
@不赞成
公共字符串getImage(){
返回getName();
}
/**返回变量的名称*/
公共字符串getName(){
返回super.getImage();
}
根据:
注意使用
引用上下文节点。应该避免在表达式的开头使用/
,因为它将测试文件中的所有节点,并抑制比预期更多的冲突
因此,您只需使用:
使用
会给我一个运行时异常:org.jaxen.saxpath.XPathSyntaxException:./[@Name='id']:2:应该是“.”、“…”、“@'、“*”中的一个,
我已经用“/[@Name='id']”解决了这个问题。
但是我现在遇到了一个问题,其他规则在转换为使用@Name
后失败。我将用新问题更新我的初始问题,使用
给我一个运行时异常:org.jaxen.saxpath.XPathSyntaxException:。/[@Name='id']:2:预期为“.”、“…”、“@'、“*”,
我已经用“/[@Name='id']”解决了这个问题。
但我现在遇到了一个其他规则失败的问题,将它们转换为使用@Name
后。我将用新问题更新我的初始问题