禁止某些班级违反PMD

时间:2019-06-07 10:48:22

标签: java pmd

我有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的行为,无论在哪个类中。我在做什么错了?

1 个答案:

答案 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函数。 }}