web-dev-qa-db-fra.com

Comment supprimer les avertissements FindBugs pour les champs ou les variables locales

Je voudrais supprimer les avertissements FindBugs pour des champs spécifiques ou des variables locales. FindBugs documente que la cible peut être Type, Champ, Méthode, Paramètre, Constructeur, Package pour son annotation edu.umd.cs.findbugs.annotations.SuppressWarning [1]. Mais cela ne fonctionne pas pour moi d'annoter le champ, uniquement lorsque j'annote la méthode, l'avertissement est supprimé.

Annoter une méthode entière me semble large. Existe-t-il un moyen de supprimer les avertissements sur des champs spécifiques? Il y a une autre question connexe [2], mais pas de réponse.

[1] http://findbugs.sourceforge.net/manual/annotations.html

[2] Supprimer les avertissements FindBugs dans Eclipse

Code de démonstration:

public class SyncOnBoxed
{
    static int counter = 0;
    // The following SuppressWarnings does NOT prevent the FindBugs warning
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
    final static Long expiringLock = new Long(System.currentTimeMillis() + 10);

    public static void main(String[] args) {
        while (increment(expiringLock)) {
            System.out.println(counter);
        }
    }

    // The following SuppressWarnings prevents the FindBugs warning
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
    protected static boolean increment(Long expiringLock)
    {
        synchronized (expiringLock) { // <<< FindBugs warning is here: Synchronization on Long in SyncOnBoxed.increment()
            counter++;
        }
        return expiringLock > System.currentTimeMillis(); // return false when lock is expired
    }
}
23
Christian Esken

@SuppressFBWarnings sur un champ supprime uniquement les avertissements findbugs signalés pour cette déclaration de champ, pas tous les avertissements associés à ce champ.

Par exemple, cela supprime l'avertissement "Le champ n'est jamais défini sur null":

@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;

Je pense que le mieux que vous puissiez faire est d'isoler le code avec l'avertissement dans la plus petite méthode possible, puis de supprimer l'avertissement sur l'ensemble de la méthode.

Remarque: @SuppressWarnings a été marqué déconseillé en faveur de @SuppressFBWarnings

21
TimK

Vérifiez http://findbugs.sourceforge.net/manual/filter.html#d0e2318 Il existe une balise locale qui peut être utilisée avec la balise Method. Ici, vous pouvez spécifier quel bogue doit être exclu pour une variable locale spécifique. Exemple:

<FindBugsFilter>
  <Match>
        <Class name="<fully-qualified-class-name>" />
        <Method name="<method-name>" />
        <Local name="<local-variable-name-in-above-method>" />
        <Bug pattern="DLS_DEAD_LOCAL_STORE" />
  </Match>
</FindBugsFilter>
3
Jyothi