特定のクラスでの抑制PMD違反

マリウス:

私が持っているViewState多くのパラメータを持つコンストラクタを持つPOJOクラスを。問題は、PMDが投げされていることであるExcessiveParameterList彼らに違反し。

今、私はで終わるすべてのクラスのためにこの違反を抑止しようとしているViewState.java(例えば中DashboardViewState.java)。私は自分にこれを追加しましたrules-pmd.xml

<rule ref="category/java/design.xml/ExcessiveParameterList">
    <properties>
        <!--Ignore ExcessiveParameterList on ViewState classes -->
        <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['*ViewState.java']"/>
    </properties>
</rule>

問題は、これがに対するすべての違反を抑制していないということですExcessiveParameterListどのクラスに関係なく。何が私が間違っているのでしょうか?

oowekyala:

これは、の複製であるこの質問誰もが私の答えをupvotedないので、私は重複としてこれにフラグをすることはできませんが、。

参照https://stackoverflow.com/a/56460327/6245827をあなたの表現は、ルールのすべての違反を抑制する理由の詳細については。

ここでの解決策をテストすることです@ImageClassOrInterfaceDeclarationの属性を、およびない使用//ではなく、ancestorチェック:

./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'ViewState')]

あなたがやってに限られているので、XPath 1.0のは、正規表現をサポートしていないcontainsようにここにチェックを、または模倣ends-withで関数をsubstringで説明のように、この答え

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=232685&siteId=1