Проверка значения переменной с помощью Checkstyle/PMD/Findbugs

У меня есть мультимодульный проект Maven, в настоящее время работающий с Checkstyle, PMD и Findbugs. В некоторых классах у меня есть методы с аннотациями. Эти аннотации имеют параметр со значением, которое должно следовать определенному регулярному выражению. Существует ли простой способ найти значение этого параметра и проверить, соответствует ли он шаблону, используя любой из ранее упомянутых инструментов. Я попытался написать пользовательский чек для Checkstyle. Однако, поскольку Checkstyle видит только построчно, он не может проверять параметры, которые установлены с помощью заключительных строк. Я оглянулся, но ничего не смог найти. Большое спасибо.

1 ответ

Решение

Да, есть. Это выглядит как основной пример правил XPath PMD.

Вы можете написать выражение XPath поверх AST, чтобы сопоставить аннотации, которые не соответствуют вашему определению. Кроме того, дизайнер очень полезен, чтобы помочь вам разработать и протестировать ваше правило.

Таким образом, вы могли бы написать что-то вроде:

//Annotation[pmd-java:typeIs('java.lang.SuppressWarnings') and .//MemberValue//Literal[not(matches(@Image, '[0-9]+'))]]

Будет соответствовать всем @SuppressWarnings аннотации, значения которых не совпадают [0-9]+, Вы можете дополнительно уточнить это, чтобы искать значения конкретного ключа, если это необходимо.

Как только вы освоитесь с XPath, вы просто записываете его в свой набор правил и можете запускать его на своей кодовой базе.

Обратите внимание, что XPath, указанный в примере, является XPath 2.0, так как он использует matches функция недоступна в более старых версиях. PMD поддерживает XPath 1.0, режим совместимости 1.0 и 2.0, являясь 1.0 по умолчанию, но переопределяемый в определении правила

Другие вопросы по тегам