2009-10-10 8 views
5

Je gère une API qui a désapprouvé certains champs statiques publics. CheckStyle s'en plaint bruyamment mais je préfère l'ignorer complètement puisque j'ai traité le problème en disant que les champs sont obsolètes. En particulier, la bibliothèque a des constantes pour l'énumération (public static final) mais elles ne sont pas marquées comme finales. CheckStyle se plaindra d'eux, mais je ne peux pas les changer en finale sans casser le contrat.Puis-je désactiver les plaintes CheckStyle pour les méthodes et classes obsolètes?

Mon plan est de les marquer comme obsolètes et ensuite les supprimer plus tard. Mais les marquer comme obsolètes ne les supprime pas du rapport CheckStyle.

+0

Pouvez-vous fournir la sortie exacte? –

Répondre

8

J'ai deux options pour vous:

  1. supprimer l'avertissement pour chaque ligne manuellement

    Cette approche est moins souple que vous devez maintenir la configuration de suppression chaque fois que vous décalez les lignes . Mais vous pouvez gérer chaque occurrence individuellement. Je ne sais pas quel contrôle cause votre problème, donc vous devez remplacer YOURCHECK par le nom correct. YOURCLASS nomme le fichier java, qui contient le code obsolète, mais vous pouvez insérer .* pour l'appliquer à tous les fichiers. YOURLINES est une liste de valeurs séparées par des virgules, où chaque valeur est un entier ou une plage d'entiers dénotée par un entier-integer.

  2. utiliser un commentaire pour conseiller checkstyle d'ignorer les avertissements

    Cette solution vous permet de désactiver les contrôles pour tous les membres dépréciées à la fois. Mais vous devez suivre une convention stricte. Vous devez ajouter un commentaire @deprecated à ces membres (ce que vous pouvez déjà faire) à la toute dernière position, car ce filtre a une gamme stricte de lignes.

    /** 
    * @deprecated I don't like this anymore. 
    */ 
    public static String EXAMPLE = "example"; 
    

    Cette solution nécessite une modification dans votre fichier de configuration. Vous devez d'abord ajouter FileContentsHolder en tant qu'enfant à TreeWalker.

    <module name="TreeWalker"> 
        ... 
        <module name="FileContentsHolder"/> 
        ... 
    </module> 
    

    Maintenant, vous pouvez configurer le SuppressWithNearbyCommentFilter qui fait partie du module Checker.

    <module name="Checker"> 
        ... 
        <module name="SuppressWithNearbyCommentFilter"> 
         <property name="commentFormat" value=".*deprecated.*"/> 
         <property name="checkFormat" value=".*"/> 
         <property name="influenceFormat" value="2"/> 
        </module> 
        ... 
    </module> 
    

    Si vous décidez d'ignorer que des contrôles spécifiques, réglez l'attribut checkFormat. Ou si vous souhaitez utiliser un autre commentaire, modifiez l'attribut commentFormat. Mais il est très important que vous définissiez influenceFormat à la bonne valeur. Il indique à Checkstyle dans combien de lignes après le commentaire il est dû ignorer ces contrôles.

P.S .: Notez que le plug-in Eclipse CheckStyle supprime le module FileContentsHolder, lorsque vous modifiez la configuration avec son interface utilisateur, de sorte que vous ne devez pas l'utiliser.

+2

C'est génial. Parfait! –