Мое требование состоит в том, чтобы проанализировать файлы Java и найти классы или интерфейсы, которые реализуют определенный интерфейс.Поэтому я начал с реализации пользовательских правил в PMD.Я смог написать выражение XPath для поиска классов и интерфейсов, но не смог выяснить, как правильно передать имя интерфейса, для которого должен выполняться поиск, в правило XPath.Один из способов состоял в том, чтобы определить свойство и обновить XML-файл перед вызовом PMD.
<rule name="Implement or extend an interface"
message="Implement or extend an interface"
class="net.sourceforge.pmd.rules.XPathRule">
<description>
This rule will help us to find out all the classes/interface which implement a particular interface
</description>
<properties>
<property name="xpath">
<value>
<![CDATA[
//ImplementsList/ClassOrInterfaceType[@Image=$interfaceName] |
//ExtendsList/ClassOrInterfaceType[@Image=$interfaceName]
]]>
</value>
</property>
<property name="interfaceName">
<value>Should be set at run time</value>
</property>
</properties>
<example>
Проблема с вышеуказанным подходом состоит в том, что PMD не может быть вызван в потоках, так как XML будетshared.
Кто-нибудь сталкивался с такой проблемой с PMD, когда значения должны передаваться правилу во время выполнения?