我已经知道了各种注释或评论,我可以添加到我的代码,但它不是我要找的。
我在寻找,只有无我修改CyclomaticComplexity规则的方式。我没有看到该规则的选择,尽管这似乎是一个相当普遍的需求。还有犯规似乎是一个XPath的,因为它使用的Java类。
如果没有更好的可以覆盖用于规则的Java类?
你说得对,有这个规则没有具体的选项,明确地忽略hashCode
和equals
方法。然而,现在应该可以通过suppressions。每个规则都有一个“violationSuppressXPath”属性 - 它似乎,这是用于在某种程度上这条规则,它应该与这个用例的工作:它不仅适用于侵权行为,而且在分析的源代码。
下面是CyclomaticComplexityRule从StdCyclomaticComplexityRule继承了源代码。如果你看一下line 188,你会看到,该方法节点检查任何镇压。如果被抑制的方法中,然后将其未分析和 不应该对类的复杂计算。 [见下面更新]。
对于violationSuppressXPath
可能的XPath表达式可能是这样的:
./MethodDeclarator[@Image='hashCode' or @Image='equals']
你需要使用一个custom ruleset,以便配置属性。你的规则集可能是这样的:
<?xml version="1.0"?>
<ruleset name="Custom ruleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>CyclomaticComplexity ignoring hashCode and equals</description>
<rule ref="rulesets/java/codesize.xml/CyclomaticComplexity">
<properties>
<property name="violationSuppressXPath" value="./MethodDeclarator[@Image='hashCode' or @Image='equals']"/>
</properties>
</rule>
</ruleset>
请注意,我的例子中使用PMD 5.4.x版本 - 这是比4.3 PMD你提到新得多。该规则组织,以支持多国语言被改变 - 这意味着,对于PMD 4.3规则参考将只是rulesets/codesize.xml/CyclomaticComplexity
。
更新(2016年5月20日)
随着配置violationSuppressXPath属性,方法“等于”和“的hashCode”不再被强调。只有违反消息就被抑制。然而该方法的内容仍算到类的总的复杂性,使任何条件/ if语句/循环/等。检查(这是因为super.visit()
被抑制在line 186之前调用),并因为isSuppressed
检查只能理解注释。
这意味着,虽然方法本身不再被强调,该类是,因为它包含了复杂的方法。
完全忽略了equals / hashCode方法的唯一方法是,用注释这些
@SuppressWarnings("PMD.CyclomaticComplexity")
然后,他们完全忽略了,真不朝类复杂计算。
它为我工作。
// Ignore PMD warning that equals and hashCode should be defined, while we need only custom equals.
@SuppressWarnings("PMD.OverrideBothEqualsAndHashcode")
class DefineYourClass...