2009-12-02 29 views

Respuesta

250

El enfoque inicial FindBugs implica archivos de configuración XML aka filters. Esto es realmente menos conveniente que la solución PMD, pero FindBugs funciona en bytecode, no en código fuente, por lo que los comentarios obviamente no son una opción. Ejemplo:

<Match> 
    <Class name="com.mycompany.Foo" /> 
    <Method name="bar" /> 
    <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" /> 
</Match> 

Sin embargo, para resolver este problema, FindBugs más tarde introdujo otra solución basada en annotations (ver SuppressFBWarnings) que se puede utilizar en la clase o en el nivel de método (más conveniente que el XML en mi opinión). Ejemplo (quizás no es el mejor pero, bueno, es sólo un ejemplo):

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="HE_EQUALS_USE_HASHCODE", 
    justification="I know what I'm doing") 

Nota que desde FindBugs 3.0.0 SuppressWarnings ha sido desaprobado en favor de @SuppressFBWarnings debido al choque con el nombre de Java SuppressWarnings.

+79

1 por su comentario "Yo sé lo que estoy haciendo" – dhiller

+4

Bono Pregunta: ¿Cómo puedo encontrar el valor apropiado para un determinado informó "error" (utilizando un sonar)? – PlanBForOpenOffice

+27

El problema, por supuesto con el uso del enfoque de anotación es que su código importa innecesariamente (y subsiguiente dependencia) la biblioteca Findbugs :( –

13

Aquí es un ejemplo más completo de un filtro XML (el ejemplo anterior por sí solo no va a funcionar, ya que solo muestra un fragmento y no se encuentra el <FindBugsFilter> iniciar y fin):

<FindBugsFilter> 
    <Match> 
     <Class name="com.mycompany.foo" /> 
     <Method name="bar" /> 
     <Bug pattern="NP_BOOLEAN_RETURN_NULL" /> 
    </Match> 
</FindBugsFilter> 

Si está utilizando el complemento Eclipse FindBugs, busque su archivo de filtro XML usando Ventana-> Preferencias-> Java-> Buscar Bugs-> Filtrar archivos-> Excluir archivos de filtro-> Agregar.

-5

voy a salir de ésta aquí: https://stackoverflow.com/a/14509697/1356953

Tenga en cuenta que esto funciona con java.lang.SuppressWarnings así que no hay necesidad de utilizar una anotación separada.

@SuppressWarnings en un campo sólo suprime FindBugs advertencias informaron de que la declaración de campo, no todos los asociados con la advertencia de que campo.

Por ejemplo, esto suprime la "Field solamente siempre establece en null" advertencia:

@SuppressWarnings ("UWF_NULL_FIELD") cadena s = null; Creo que el mejor que puede hacer es aislar el código con la advertencia en el método más pequeño que pueda, luego suprima la advertencia en todo el método.

+5

'java.lang.SuppressWarnings' no puede funcionar. Tiene retención de fuente, por lo que no es visible para encontrar errores. –

5

actualización Gradle

dependencies { 
    compile group: 'findbugs', name: 'findbugs', version: '1.0.0' 
} 

Localizar el Informe FindBugs

file: /// Users/su_usuario/IdeaProjects/Nombre del Proyecto/build/reportaje/findbugs/principal.html

acceder al mensaje específica

find bugs

Importe la versión correcta de la anotación

import edu.umd.cs.findbugs.annotations.SuppressWarnings; 

Añadir la anotación directamente sobre el código erróneo

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX") 

Consulte aquí para obtener más información: findbugs Spring Annotation

+1

Puede usar 'compile 'net.sourceforge.findbugs: annotations: 1.3.2'' sintaxis en su lugar, que es más corto. –

+1

+1, pero amablemente actualice su respuesta con: gradle 'testCompile 'com.google.code.findbugs: anotaciones: 3.0.0'' y el nombre de la anotación' @ SuppressFBWarnings' –

10

Como otros mencionado, se puede utilizar la anotación @SuppressFBWarnings. Si no quiere o no puede agregar otra Dependencia a su código, puede agregar la Anotación a su Código usted mismo, a los Findbugs no les importa en qué Paquete está la Anotación.

@Retention(RetentionPolicy.CLASS) 
public @interface SuppressFBWarnings { 
    /** 
    * The set of FindBugs warnings that are to be suppressed in 
    * annotated element. The value can be a bug category, kind or pattern. 
    * 
    */ 
    String[] value() default {}; 

    /** 
    * Optional documentation of the reason why the warning is suppressed 
    */ 
    String justification() default ""; 
} 

Fuente: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88

Cuestiones relacionadas