2017-12-14 6 views
0

私は以下のクラスを持っているを確認するスキップ未使用のメソッド( "unusedMethod"と "postConstructAnnotatedMethod")については、@PreDestroyと@PostConstructでアノテーションされたメソッドのルール "UnusedPrivateMethod"を無視したいと思います。PMDは@PostConstructでannotaded方法や@PreDestroy

<rule ref="rulesets/java/unusedcode.xml"> 
     <exclude name="UnusedPrivateMethod"/> 
    </rule> 
    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod"> 
     <properties> 
      <property name="violationSuppressXPath" 
         value="//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='PostConstruct']"/> 
     </properties> 
    </rule> 

をしかし、クラスは@PostConstructアノテーションを付けるメソッドのためだけではなく、私の注釈が含まれている中で、この場合、PMDは、すべてのメソッドのために、このルールを確認するためにスキップ:

は、私はこのような何かを行うことができます知っています。私は、チェックコードの後、私は "unusedMethod"にエラーがあり、PMDは "postConstructAnnotatedMethod"に関するエラーを通知しないことを期待しています。

私はこのような何かやりたい:希望のアノテーションを付けたメソッドだけではなく、すべてのメソッドをスキップする

<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod"> 
    <properties> 
     <property name="violationSuppressXPath" 
        value="//MethodDeclaration/Annotation/Name[@Image='PostConstruct']"/> 
    </properties> 
</rule> 

を。

また、コードを多くの@SuppressWarnings("PMD.UnusedPrivateMethod")アノテーションで汚染したくありません。

答えて

0

抑制XPathは、違反が起点となるノードを起点として実行されるため、単に「メソッドに移動してアノテーションをチェックする」ことができます。例えば

:応答のための

<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod"> 
    <properties> 
     <property name="violationSuppressXPath" 
        value="./ancestor::ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='PostConstruct']"/> 
    </properties> 
</rule> 
+0

おかげで、それは私の問題を解決していません。このノードを私のruleset.xmlに追加した後も、まだ未使用のメソッドに関する2つのメッセージが残っています。 unusedMethodおよびpostConstructAnnotatedMethodの場合 –

+0

私は飛行中にxpathを書いていました。私はちょうどそれを更新した、それは今働く必要があります。 – Johnco

+0

PMDは、どのメソッドでも@PostConstructアノテーションを持つクラス全体でこのルールを無効にします。注釈付きのメソッドに対してのみこのルールを無効にしたい私は私の質問でそれを記述する。 –

関連する問題