2

私の要件は、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 でこのような問題に直面した人はいますか?

4

1 に答える 1

1

XPath ルールで異なる値を使用できるようにする場合は、ルールの複数のコピー (値ごとに 1 つ) が必要です。PMD を使用する別の方法は、Java ルールを使用することです。XPath を呼び出すこともできます。違いは、Java はランタイムであるため、後で値を取得したり、一連の値をループしたりできることです。

于 2012-05-20T22:56:46.883 に答える