私の要件は、Java ファイルを解析し、特定のインターフェイスを実装するクラスまたはインターフェイスを見つけることです。したがって、PMD でカスタム ルールを実装することから始めました。クラスとインターフェースを検索する XPath 式を作成できましたが、検索対象のインターフェース名を XPath ルールに渡す正しい方法を見つけることができませんでした。1 つの方法は、プロパティを定義し、PMD を呼び出す前に xml ファイルを更新することでした。
<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>
上記のアプローチの問題は、xml が共有されるため、PMD をスレッドで呼び出すことができないことです。
実行時に値がルールに渡される PMD でこのような問題に直面した人はいますか?