2

我希望添加一个 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 做到这一点?

4

1 回答 1

7
//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,然后检查是否是public。

于 2009-10-21T14:30:19.693 回答