java - Cómo suprimir las advertencias de FindBugs para campos o variables locales
suppress-warnings (2)
Me gustaría suprimir las advertencias de FindBugs para campos específicos o variables locales. FindBugs documenta que el Destino puede ser Tipo, Campo, Método, Parámetro, Constructor, Paquete para su edu.umd.cs.findbugs.annotations.SuppressWarning anotación [1]. Pero no me sirve para anotar el campo, solo cuando anoto el método, la advertencia se suprime.
Anotar todo un método me parece muy amplio. ¿Hay alguna forma de suprimir las advertencias en campos específicos? Hay otra pregunta relacionada [2], pero no hay respuesta.
[1] http://findbugs.sourceforge.net/manual/annotations.html
[2] Suprimir las advertencias de FindBugs en Eclipse
Código demo:
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
}
}
Consulte http://findbugs.sourceforge.net/manual/filter.html#d0e2318 Hay una etiqueta Local que se puede usar con la etiqueta Method. Aquí puede especificar qué error debe excluirse para una variable local específica. Ejemplo:
<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>
@SuppressFBWarnings
en un campo solo suprime las advertencias de Findbugs informadas para esa declaración de campo, no todas las advertencias asociadas con ese campo.
Por ejemplo, esto suprime la advertencia "El campo solo se establece en nulo":
@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;
Creo que lo mejor que puedes hacer es aislar el código con la advertencia en el método más pequeño que puedas, luego suprimir la advertencia en todo el método.
Nota: @SuppressWarnings
fue marcado en deprecated a favor de @SuppressFBWarnings