【发布时间】:2016-04-26 12:06:56
【问题描述】:
我们有一个项目由 PMD 检查是否违反例如未使用的私有方法。我们的问题是我们不知道是否可以忽略带有@PostConstruct 注释的私有方法。
规则定义如下:
<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod"/>
编辑:
我的目标是定义一次以忽略带注释的方法。我想防止在每个方法上写@SupressWarnings。
【问题讨论】:
我们有一个项目由 PMD 检查是否违反例如未使用的私有方法。我们的问题是我们不知道是否可以忽略带有@PostConstruct 注释的私有方法。
规则定义如下:
<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod"/>
我的目标是定义一次以忽略带注释的方法。我想防止在每个方法上写@SupressWarnings。
【问题讨论】:
借助 HairyFotr 的提示和建议,我能够将我的规则集配置为忽略 private 和 @PostConstruct 的方法。
我必须使用的规则是:
<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod">
<properties>
<property name="violationSuppressXPath"
value="//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='PostConstruct']" />
</properties>
</rule>
【讨论】:
moz987's answer 会在至少存在一个 @PostConstruct 注释时抑制文件中的所有 UnusedPrivateMethod 违规。如果您只想抑制来自带有@PostConstruct 注解的方法的违规行为并保留来自没有注解的方法的违规行为,那么您必须在XPath 前面加上ancestor:: 而不是//。
注意:以下示例使用 PMD 6.0.0 的新规则引用。
<rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
<properties>
<property name="violationSuppressXPath"
value="ancestor::ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='PostConstruct']" />
</properties>
</rule>
【讨论】: