PMD - 检查太多公共方法(但排除构造函数和getter / setter)

时间:2009-10-14 10:07:59

标签: java pmd

我希望添加PMD检查以确保类没有太多的公共方法,但我不希望构造函数和getter / setter包含在检查中。

ExcessivePublicCount检查包括构造函数,getter / setter和公共变量,我看不到自定义它的方法。

TooManyMethods检查会排除getter / setter,但包含其他所有内容(包括私有方法)。检查的XPath代码如下。

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

任何人都可以帮我修改它以达到我想要的效果,或者建议用PMD做另一种方法吗?

1 个答案:

答案 0 :(得分: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 .. [@公共= '真']
从MethodDeclarator返回一个MethodDeclaration,然后检查它是否是公共的。