2009-10-14 4 views
1

Я хочу добавить проверку PMD, чтобы гарантировать, что класс не имеет слишком много общедоступных методов, но мне не нужны конструкторы и геттеры/сеттеры для включения в чек.PMD - проверьте слишком много общедоступных методов (но исключайте конструкторы и геттеры/сеттеры)

Проверка ExcessivePublicCount включает в себя конструкторы, геттеры/сеттеры и общедоступные переменные, и я не вижу способа ее настройки.

Проверка TooManyMethods исключает геттеры/сеттеры, но включает в себя все остальное (включая частные методы). Код 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