使用PMD的自定义规则 - 在运行时将值传递给规则

时间:2010-07-31 13:32:01

标签: java pmd

我的要求是解析java文件并找到实现特定接口的类或接口。因此,我开始在PMD中实现自定义规则。我能够写一个XPath表达式来搜索类和&接口但无法确定将要对其进行搜索的接口名称传递给XPath规则的正确方法。一种方法是在调用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>

       

上述方法的问题是无法在线程中调用PMD,因为xml将被共享。

有没有人遇到PMD这样的问题,其中值会在运行时传递给规则?

1 个答案:

答案 0 :(得分:1)

如果您希望能够在XPath规则中使用不同的值,则需要拥有该规则的多个副本 - 每个值一个。使用PMD的替代方法是使用Java规则。它甚至可以调用XPath。区别在于Java是运行时,因此可以稍后获取值或循环一组值。