有没有一种方法,使PMD规则集忽略Hashcode方法和equals方法的圈复杂度?

问题描述 投票:2回答:2

我已经知道了各种注释或评论,我可以添加到我的代码,但它不是我要找的。

我在寻找,只有无我修改CyclomaticComplexity规则的方式。我没有看到该规则的选择,尽管这似乎是一个相当普遍的需求。还有犯规似乎是一个XPath的,因为它使用的Java类。

如果没有更好的可以覆盖用于规则的Java类?

java hashcode pmd cyclomatic-complexity
2个回答
2
投票

你说得对,有这个规则没有具体的选项,明确地忽略hashCodeequals方法。然而,现在应该可以通过suppressions。每个规则都有一个“violationSuppressXPath”属性 - 它似乎,这是用于在某种程度上这条规则,它应该与这个用例的工作:它不仅适用于侵权行为,而且在分析的源代码。

下面是CyclomaticComplexityRuleStdCyclomaticComplexityRule继承了源代码。如果你看一下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")

然后,他们完全忽略了,真不朝类复杂计算。


0
投票

它为我工作。

 // Ignore PMD warning that equals and hashCode should be defined, while we need only custom equals.
@SuppressWarnings("PMD.OverrideBothEqualsAndHashcode")
class DefineYourClass...
© www.soinside.com 2019 - 2024. All rights reserved.