Подавить нарушение PMD в определенных классах - PullRequest
1 голос
/ 07 июня 2019

У меня есть 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 независимо от того, в каком классе. Что я делаю не так?

1 Ответ

3 голосов
/ 12 июня 2019

это дубликат этого вопроса , хотя никто не проголосовал за мой ответ, и я не могу пометить его как дубликат.

Подробнее о причинах см. https://stackoverflow.com/a/56460327/6245827Ваше выражение подавляет все нарушения правила.

Решение здесь состоит в том, чтобы проверить атрибут @Image класса ClassOrInterfaceDeclaration и не , используя //, а скорее проверку ancestor:

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

XPath 1.0 не поддерживает регулярное выражение, поэтому вы ограничены выполнением contains проверки, как здесь, или имитацией функции ends-with с substring, как объяснено в этот ответ

...