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