2010-07-31 75 views
2

我的需求是解析java文件並查找實現特定接口的類或接口。因此我開始在PMD中實現自定義規則。我能夠編寫一個XPath表達式來搜索接口類&,但無法找出正確的方式將要進行搜索的接口名稱傳遞給XPath規則。一種方法是在調用PMD之前定義屬性並更新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將被共享。

有沒有人遇到過這樣的PMD問題,其中值要在運行時傳遞給規則?

+0

我找到了解決辦法!雖然不使用PMD。 Checkstyle是另一種靜態分析工具,它允許定義自定義規則並將運行時值傳遞給這些規則。 – Amit 2010-08-02 05:22:57

回答

1

如果您希望能夠在XPath規則中使用不同的值,那麼您需要有規則的多個副本 - 每個值有一個副本。使用PMD的另一種方法是使用Java規則。它甚至可以調用XPath。不同之處在於Java是運行時,因此可以稍後獲取值或循環訪問一組值。