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

Wil*_*iam 1 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
]
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我修改这个以实现我想要的,或者建议用PMD做另一种方法吗?

Mic*_*mlk 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
]
Run Code Online (Sandbox Code Playgroud)

您正在计算MethodDeclarator,因此不应包括ctors.
.. [@ Public ='true']
从MethodDeclarator返回一个到MethodDeclaration,然后检查它是否是公共的.