2009-10-14 7 views
1

Je souhaite ajouter une vérification PMD pour m'assurer qu'une classe n'a pas trop de méthodes publiques, mais je ne veux pas de constructeurs et de getters/setters être inclus dans le chèque. La vérification ExcessivePublicCount inclut des constructeurs, des getters/setters et des variables publiques, et je ne vois pas comment les personnaliser.PMD - vérifier trop de méthodes publiques (mais exclure les constructeurs et les getters/setters)

La vérification TooManyMethods exclut les getters/setters, mais inclut tout le reste (y compris les méthodes privées). Le code XPath pour la vérification est le suivant.

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

Quelqu'un peut-il me aider à modifier ce pour obtenir ce que je veux, ou suggérer une autre façon de le faire avec PMD?

Répondre

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 
] 

Vous comptez MethodDeclarator pour ne pas inclure les agents.
.. [@ Public = 'true']
Reculez-en un depuis MethodDeclarator vers MethodDeclaration, puis vérifiez s'il est public.

+0

Vous êtes un érudit et un gentil - merci! :) – William