2009-10-14 56 views
1

我希望添加PMD檢查以確保類沒有太多的公共方法,但我不想要構造函數和getter/setters將被包括在支票中。PMD - 檢查太多的公共方法(但排除構造函數和getter/setters)

ExcessivePublicCount檢查包括構造函數,getters/setters和公共變量,我看不到自定義它的方法。

TooManyMethods檢查不包括getters/setters,但包含其他所有內容(包括私有方法)。檢查的XPath代碼如下。

//ClassOrInterfaceDeclaration/ClassOrInterfaceBody 
[ 
    count(descendant::MethodDeclarator[ 
     not 
     (
     starts-with(@Image,'get') 
      or 
     starts-with(@Image,'set') 
     ) 
    ]) > $maxmethods 
] 

任何人都可以幫我改變這個來實現我想要的,或者建議另一種方式來做到這一點與PMD?

回答

6
//ClassOrInterfaceDeclaration/ClassOrInterfaceBody [ 
count(descendant::MethodDeclarator[ 
..[@Public='true'] 
    and 
not 
(
    starts-with(@Image,'get') 
    or 
    starts-with(@Image,'set') 
    or 
    starts-with(@Image,'is') 
) 
]) > $maxmethods 
] 

您正在計算MethodDeclarator,因此不應包含ctors。
.. [@ Public ='true']
從MethodDeclarator返回一個MethodDeclaration,然後檢查它是否是公共的。

+0

你是一個學者和紳士 - 謝謝你! :) – William 2009-10-22 10:40:49

相關問題