Проверка информации о типе в правиле XPath возможна с помощью встроенной функции pmd-java:typeIs. Однако эта функция принимает FQCN в качестве строкового параметра, поэтому ее можно использовать только в том случае, если это FQCN известно при написании правила или если оно может быть определено с помощью XPath.
Самый простой пример, который я мог придумать, это:
Код: Выделить всё
package foo.bar;
public class FooBar {
private String foo;
private java.lang.String bar;
}
Код: Выделить всё
java.lang.String). Однако в моем реальном случае использования это неизвестно при написании правила, поскольку правило должно быть общим.
PMD 7.24.0 анализирует пример в следующий AST:
└─ CompilationUnit
├─ PackageDeclaration
│ └─ ModifierList
└─ ClassDeclaration
├─ ModifierList
└─ ClassBody
├─ FieldDeclaration
│ ├─ ModifierList
│ ├─ ClassType
│ └─ VariableDeclarator
│ └─ VariableId
└─ FieldDeclaration
├─ ModifierList
├─ ClassType
└─ VariableDeclarator
└─ VariableIdn>

К сожалению, я не могу найти способ получить доступ к этой информации в правиле XPath, чтобы использовать ее в качестве значения параметра для pmd-java:typeIs.
Есть ли способ получить доступ к FQCN класса, представленного КлассТип узел; или, в более широком смысле, есть ли способ проверить, представляют ли два узла ClassType один и тот же класс?
Мобильная версия