Проверка значения переменной с помощью Checkstyle / PMD / Findbugs - PullRequest
0 голосов
/ 04 июля 2018

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

1 Ответ

0 голосов
/ 04 июля 2018

Да, есть. Это выглядит как основной пример правил 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 по умолчанию, но переопределяемый в определении правила

...