2016-05-12 10 views
2

私は自分のコードに追加できるさまざまな注釈やコメントについて既に知っていますが、それは私が探しているものではありません。Cyclomaticの複雑さのためにPMDルールセットがHashcode&Equalsメソッドを無視する方法はありますか?

私はCyclomaticComplexityルールを変更するしか方法がありません。 ルールには何も表示されませんが、むしろ一般的な必要性のようです。そして、Javaクラスを使用しているので、xpathではないようです。

ルールに使用されているJavaクラスを上書きすることはできません。

答えて

2

このルールには、hashCodeとのメソッドを明示的に無視するという特別なオプションはありません。しかし、現在はsuppressionsで可能になるはずです。すべてのルールには "violationSuppressXPath"プロパティがあります。このルールには、このユースケースで動作するように、ルールに使用されているようです。違反に適用されるだけでなく、ソースコードを分析する際にも適用されます。

StdCyclomaticComplexityRuleを継承するCyclomaticComplexityRuleのソースコードはこちらです。 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を使用すること - あなたが言及PMD 4.3よりもはるかに新しいものです。複数の言語をサポートするために、ルール構成が変更されました。つまり、PMD 4.3のルール参照は、ちょうどrulesets/codesize.xml/CyclomaticComplexityになります。

更新(2016年5月20日)に構成violationSuppressXPathプロパティで

、方法は「等しい」と「ハッシュコード」は、もはや強調表示されません。違反メッセージのみが抑制されます。 しかし、のメソッドの内容は、クラスの合計複雑さに依然として影響を及ぼします。したがって、条件/ if文/ループ/などがあります。 (これは、抑制の前にline 186super.visit()が呼び出されているためで、isSuppressedのチェックでのみ注釈が認識されるためです)。

これは、メソッド自体が強調表示されていないものの、複雑なメソッドが含まれているためです。

完全にイコール/ hashCodeメソッドを無視する唯一の方法は、次に

@SuppressWarnings("PMD.CyclomaticComplexity") 

でこれらに注釈を付ける、です、彼らは完全に無視され、実際には、クラスの複雑さにはカウントされません。

+0

優れているのは、無視する必要があるファイルと同様に、トップレベルのXMLにメソッド名 'equals'と 'hashCode'を入れることです。おそらく大きな質問でしょうか? – Adam

+1

私は 'equals()'と 'hashCode()'に '@SuppressWarnings(" PMD.CyclomaticComplexity ")というアノテーションを付けましたが、私はまだクラスに関する警告を見ています:'クラス 'Order'はModified Cyclomatic Complexity 3(最高= 11)」と同様に「標準的な循環性の遵守(Common Cyclomatic Comlexity) – Adam

+1

@Adam古い投稿ですが、私もこれを見つけました。 'Standard Cyclomatic Complexity'と' Modified Cyclomatic Complexity'に対処するには '@ SuppressWarnings'を使い、' 'PMD.ModifiedCyclomaticComplexity''と '' PMD.StdCyclomaticComplexity''の両方を含めることもできます。 – avojak

関連する問題