我有ViewState
个POJO类,这些类的构造函数带有很多参数。问题是PMD向他们抛出ExcessiveParameterList
违规。
现在,我试图对所有以ViewState.java
结尾的类(例如,在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
的行为,无论在哪个类中。我在做什么错了?
答案 0 :(得分:3)
这是this question的副本,但是由于没有人支持我的答案,因此我无法将其标记为副本。
有关您的表达式为何禁止所有违反规则的行为,请参见https://stackoverflow.com/a/56460327/6245827。
这里的解决方案是测试ClassOrInterfaceDeclaration的@Image
属性,而不是使用//
来,而是进行ancestor
检查:
./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'ViewState')]
XPath 1.0不支持正则表达式,因此您仅限于像这里进行contains
检查,或者像{{3中所解释的那样,用ends-with
模仿substring
函数。 }}