在某些 类 中抑制 PMD 违规
Suppress PMD violation in certain classes
我有 ViewState
POJO classes,它的构造函数有很多参数。问题是 PMD 正在向他们抛出 ExcessiveParameterList
违规行为。
现在,我正在尝试抑制所有以 ViewState.java
结尾的 class 的违规行为(例如 DashboardViewState.java
)。我已经添加
这对我的 rules-pmd.xml
:
<rule ref="category/java/design.xml/ExcessiveParameterList">
<properties>
<!--Ignore ExcessiveParameterList on ViewState classes -->
<property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['*ViewState.java']"/>
</properties>
</rule>
问题是,这将禁止所有违反 ExcessiveParameterList
的行为,无论在 class 中。我做错了什么?
这是 this question 的副本,但由于没有人赞成我的回答,我无法将其标记为重复。
请参阅 详细了解为什么您的表达式禁止所有违反规则的行为。
这里的解决方案是测试ClassOrInterfaceDeclaration的@Image
属性,不是使用//
,而是ancestor
检查:
./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'ViewState')]
XPath 1.0 不支持正则表达式,因此您只能像此处那样进行 contains
检查,或者使用 substring
模仿 ends-with
函数,如 this answer
我有 ViewState
POJO classes,它的构造函数有很多参数。问题是 PMD 正在向他们抛出 ExcessiveParameterList
违规行为。
现在,我正在尝试抑制所有以 ViewState.java
结尾的 class 的违规行为(例如 DashboardViewState.java
)。我已经添加
这对我的 rules-pmd.xml
:
<rule ref="category/java/design.xml/ExcessiveParameterList">
<properties>
<!--Ignore ExcessiveParameterList on ViewState classes -->
<property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['*ViewState.java']"/>
</properties>
</rule>
问题是,这将禁止所有违反 ExcessiveParameterList
的行为,无论在 class 中。我做错了什么?
这是 this question 的副本,但由于没有人赞成我的回答,我无法将其标记为重复。
请参阅 详细了解为什么您的表达式禁止所有违反规则的行为。
这里的解决方案是测试ClassOrInterfaceDeclaration的@Image
属性,不是使用//
,而是ancestor
检查:
./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'ViewState')]
XPath 1.0 不支持正则表达式,因此您只能像此处那样进行 contains
检查,或者使用 substring
模仿 ends-with
函数,如 this answer