Respuestas:
El enfoque inicial de FindBugs involucra archivos de configuración XML, también conocidos como filtros . Esto es realmente menos conveniente que la solución PMD, pero FindBugs funciona en bytecode, no en el 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 anotaciones (ver SuppressFBWarnings
) que puede usar en la clase o en el nivel de método (en mi opinión, más conveniente que XML). Ejemplo (quizás no sea el mejor pero, bueno, es solo un ejemplo):
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value="HE_EQUALS_USE_HASHCODE",
justification="I know what I'm doing")
Tenga en cuenta que desde FindBugs 3.0.0 SuppressWarnings
ha quedado en desuso @SuppressFBWarnings
debido al choque de nombres con Java SuppressWarnings
.
<dependency> <groupId>net.sourceforge.findbugs</groupId> <artifactId>annotations</artifactId> <version>1.3.2</version> <scope>provided</scope> </dependency>
<dependency><groupId>com.google.code.findbugs</groupId><artifactId>annotations</artifactId><version>3.0.0</version><scope>provided</scope></dependency>
a su POM si quieren usar @SuppressFBWarnings
.
Como otros mencionaron, puede usar la @SuppressFBWarnings
anotación. Si no desea o no puede agregar otra dependencia a su código, puede agregar la anotación a su código usted mismo, a Findbugs no le importa en qué paquete se encuentre 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
Aquí hay un ejemplo más completo de un filtro XML (el ejemplo anterior por sí solo no funcionará ya que solo muestra un fragmento y le faltan las <FindBugsFilter>
etiquetas de inicio 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 FindBugs de Android Studio, busque su archivo de filtro XML usando Archivo-> Otras configuraciones-> Configuración predeterminada-> Otras configuraciones-> FindBugs-IDEA-> Filtro-> Excluir archivos de filtro-> Agregar.
Actualizar Gradle
dependencies {
compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}
Busque el informe FindBugs
archivo: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html
Encuentra el mensaje específico
Importe la versión correcta de la anotación
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
Agregue la anotación directamente encima del código ofensivo
@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
Consulte aquí para obtener más información: findbugs Spring Annotation
compile 'net.sourceforge.findbugs:annotations:1.3.2'
sintaxis, que es más corta.
testCompile 'com.google.code.findbugs:annotations:3.0.0'
y nombre de anotación@SuppressFBWarnings
Al momento de escribir esto (mayo de 2018), FindBugs parece haber sido reemplazado por SpotBugs . El uso de la SuppressFBWarnings
anotación requiere que su código se compile con Java 8 o posterior e introduce una dependencia de tiempo de compilación spotbugs-annotations.jar
.
Usar un archivo de filtro para filtrar las reglas de SpotBugs no tiene tales problemas. La documentación está aquí .
Si bien otras respuestas aquí son válidas, no son una receta completa para resolver esto.
En el espíritu de integridad:
Debe tener las anotaciones de findbugs en su archivo pom: solo son tiempo de compilación, por lo que puede usar el provided
alcance:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>findbugs-annotations</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Esto permite el uso de @SuppressFBWarnings
otra dependencia que proporciona @SuppressWarnings
. Sin embargo, lo anterior es más claro.
Luego agrega la anotación sobre su método:
P.ej
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE",
justification = "Scanning generated code of try-with-resources")
@Override
public String get() {
try (InputStream resourceStream = owningType.getClassLoader().getResourceAsStream(resourcePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, UTF_8))) { ... }
Esto incluye tanto el nombre del error como también una razón por la que deshabilita el escaneo.
Voy a dejar este aquí: https://stackoverflow.com/a/14509697/1356953
Tenga en cuenta que esto funciona java.lang.SuppressWarnings
así que no es necesario utilizar una anotación separada.
@SuppressWarnings 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":
@SuppressWarnings ("UWF_NULL_FIELD") Cadena s = nulo; 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.
java.lang.SuppressWarnings
No puedo trabajar. Tiene retención de fuente, por lo que no es visible para encontrar errores.