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
}
}
@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
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>