2009-10-14 58 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

相关问题