2012-06-05 7 views
12

Recientemente descubrí la anotación de FindBugs '@edu.umd.cs.findbugs.annotations.SuppressWarnings, que es bastante buena y permite básicamente decirle a FindBugs que ignore ciertas advertencias.Cómo suprimir múltiples advertencias de FindBugs para la misma línea de código

He implementado con éxito mi propio SLF4J vinculante siguiendo sus recomendaciones para tomar slf4j-simple y modificarlo con su propio logger y logger enlaces de fábrica, y me complace decir que funciona como un encanto.

Acabo de funcionar encontrar errores en el paquete que contiene la unión de este SLF4J y se quejan de una determinada línea de código escrito por el original StaticLoggerBinder autor (Ceki Gulku):

// to avoid constant folding by the compiler, this field must *not* be final. 
publicstatic String REQUESTED_API_VERSION = "1.6"; // !final 

FindBugs se queja de que este campo "no es final, pero debe ser". Sin embargo, la gente (muy) inteligente de SLF4J ya pensó en eso, y colocó los comentarios circundantes provistos más arriba.

Por lo tanto, sólo para obtener FindBugs se callaran, he modificado el código por mi costumbre de suprimir las advertencias FB:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL") 
public static String REQUESTED_API_VERSION = "1.6"; 

Cuando limpio mi proyecto y vuelva a ejecutar FindBugs, consigo un segundo advertencia en la misma línea de código, esta vez quejándose:

este campo no se lee. El campo es público o protegido, por lo que tal vez esté destinado a ser utilizado con clases que no se ven como parte del análisis. Si no, considere eliminarlo de la clase.

Cuando agrego esta segunda supresión de la advertencia:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL") 
@edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") 
public static String REQUESTED_API_VERSION = "1.6"; 

consigo un error del compilador/sintaxis de Eclipse:

@SuppressWarnings anotación duplicados.

¿Cómo puedo suprimir múltiples advertencias de FindBugs en la misma línea de código?

+0

Sugerencia: Use 'SuppressFBWarnings' lo que puede importar como lo haría con cualquier otra clase en lugar de utilizar el nombre totalmente calificado . –

Respuesta

17

Sólo una lista de todos los identificadores de advertencia en una matriz, dentro de una sola anotación:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({ 
     "MS_SHOULD_BE_FINAL", 
     "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"}) 
public static String REQUESTED_API_VERSION = "1.6"; 

Así como para el estándar java.lang.SuppressWarnings, la versión FindBugs también has a parameter of type String[]. Para un solo valor, las llaves se pueden omitir para facilitar la vida.

1

Prueba esto:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({"MS_SHOULD_BE_FINAL" , "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"}) 
public static String REQUESTED_API_VERSION = "1.6"; 
1

FindBugs 3+ estilo:

@SuppressFBWarnings(
    value={"NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE","STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"}, 
    justification="let me just make the build pass") 
Cuestiones relacionadas