Я пытаюсь сузить правила PMD, как я могу исключить все методы REST, которые аннотируются с помощью @GET из проверок PMD?PMD нарушениеSuppressXPath для всех методов REST @GET?
ответ
Мы используем, например, эти правила для подавления проверки в отношении методов REST для итоговой декларации. Может быть, вам нужно подобное?
<rule ref="rulesets/java/optimizations.xml/MethodArgumentCouldBeFinal">
<properties>
<!-- Ignore Rest resources -->
<property name="violationSuppressXPath" value="
//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation//Name[@Image='GET'] |
//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation//Name[@Image='POST']|
//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation//Name[@Image='PUT'] |
//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation//Name[@Image='DELETE']" />
</properties>
</rule>
PMD предоставляет несколько способов для подавления предупреждений: http://pmd.sourceforge.net/pmd-5.2.3/usage/suppressing.html
- с помощью аннотаций: @SuppressWarnings ("PMD")
- через Комментарии: // NOPMD игнорировать этот
- через Regex и XPath в соответствии с правилами
Вы также можете исключить полные файлы - см http://pmd.sourceforge.net/pmd-5.2.3/customizing/howtomakearuleset.html - Исключение файлов из набора правил
В вашем случае, violationSuppressXPath
это выражение XPath должно работать:
./ancestor::ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='GET']
Это будет идти вверх (предок) из текущего узла (который может находиться внутри метода) в объявлении метода («ClassOrInterfaceBodyDeclaration») и идет вниз по дереву оттуда, чтобы проверить аннотацию @GET. Однако я не знаю о влиянии производительности.
Update:
Полный пример:
<rule ref="rulesets/java/optimizations.xml/MethodArgumentCouldBeFinal">
<properties>
<!-- Ignore Rest resources -->
<property name="violationSuppressXPath" value="
./ancestor::ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name
[@Image='GET' or @Image='POST' or @Image='PUT' or @Image='DELETE']" />
</properties>
</rule>
Будьте осторожны при использовании этого XPath - это абсолютное выражение XPath, что означает, что вы будете отключить это правило для любого класса, который имеет по крайней мере один метод с аннотацией @ GET/POST @/@ PUT/@УДАЛИТЬ. Это замаскирует нарушения в том же классе на методы, которые не аннотируются. – adangel