Как проверить, представляют ли два узла ClassType один и тот же класс в правиле PMD XPath для JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как проверить, представляют ли два узла ClassType один и тот же класс в правиле PMD XPath для Java

Сообщение Anonymous »

Я хочу написать правило, которое проверяет, представляют ли два узла ClassType один и тот же класс, независимо от того, ссылается ли на этот класс его полное имя класса (FQCN) или нет.
Проверка информации о типе в правиле 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>
Для обоих узлов ClassType PMD Designer показывает, что PMD достаточно умен, чтобы знать, что представленный класс — это java.lang.String. Пример:
Изображение

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»