抑制某些类别中的 PMD 违规

Mar*_*ius 2 java static-analysis pmd suppress-warnings static-code-analysis

我有ViewStatePOJO 类,它们的构造函数带有许多参数。问题是 PMDExcessiveParameterList对他们施加了违规行为。

现在我试图抑制所有以ViewState.java(例如 in 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>
Run Code Online (Sandbox Code Playgroud)

问题是,这将压制所有针对ExcessiveParameterList哪个阶级的违规行为。我究竟做错了什么?

oow*_*ala 5

这是这个问题的重复,但由于没有人赞成我的答案,所以我不能将其标记为重复。

有关表达式为何抑制所有违反规则的详细信息,请参阅/sf/answers/3952222921/ 。

这里的解决方案是测试@ImageClassOrInterfaceDeclaration 的属性,而不是使用//,而是使用ancestor检查:

./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'ViewState')]
Run Code Online (Sandbox Code Playgroud)

XPath 1.0 不支持正则表达式,因此您只能contains像这里一样进行检查,或者使用 模仿ends-with函数substring,如本答案中所述