Findbugs utilizando anotaciones JSR305 en Eclipse no es encontrar errores
-
19-09-2019 - |
Pregunta
He estado experimentando con las anotaciones JSR 305 para su uso con Findbugs, específicamente la anotación @CheckForNull que habría evitado un error que acabo de encontrar lo que es a los clientes. He añadido jsr305.jar y annotations.jar a mi trayectoria de la estructura, pero los insectos no se encuentran por findbugs. Estoy usando Eclipse con el plugin Eclipse Findbugs. A continuación se muestra un código de ejemplo que muestra el mismo error, pero no lo hace cuando corro findbugs sobre ella encontrar el fallo. He intentado esto en Eclipse Galileo y Ganímedes.
public class FindBugsAnnotationsTest {
ArrayList<String> canBeNull;
@CheckForNull
public List<String> getCanBeNull() {
return canBeNull;
}
public void shouldGetFindbugsWarning() {
canBeNull.add("a string");
getCanBeNull().add("a string");
}
}
Solución
Esto puede ser obvio, pero creo que sus problemas son con Eclipse (tal vez el plugin FindBugs en particular), no es en sí FindBugs.
Es posible que considere ejecutar FindBugs desde la línea de comandos para eliminar cualquier problema de Eclipse y asegurarse de que tiene FindBugs ejecutan correctamente en su propio. Saber cómo ejecutar FindBugs en un modo autónomo le dará un retorno cuando el IDE no está configurado correctamente.
Me salvó su código fuente en un archivo llamado FindBugsAnnotationsTest.java
, añadí las importaciones para List
, ArrayList
y CheckForNull
, compilado, y corrí FindBugs 1.3.9. FindBugs genera varias señales de advertencia sobre valores nulos:
M D NP: Possible null pointer dereference in FindBugsAnnotationsTest.shouldGetFindbugsWarning() due to return value of called method Dereferenced at FindBugsAnnotationsTest.java:[line 18] M C UwF: Unwritten field: FindBugsAnnotationsTest.canBeNull At FindBugsAnnotationsTest.java:[line 12] M C NP: Read of unwritten field canBeNull in FindBugsAnnotationsTest.shouldGetFindbugsWarning() At FindBugsAnnotationsTest.java:[line 16] Warnings generated: 3
Estas son las importaciones he añadido a la parte superior de FindBugsAnnotationsTest.java
:
import java.util.ArrayList;
import java.util.List;
import edu.umd.cs.findbugs.annotations.CheckForNull;
Comandos:
javac -d . -classpath ${FINDBUGS_HOME}/lib/findbugs.jar FindBugsAnnotationsTest.java
${FINDBUGS_HOME}/bin/findbugs FindBugsAnnotationsTest.class
Cuando ${FINDBUGS_HOME}
es el directorio en el que está instalado Findbugs 1.3.9. javac
se supone que es en el camino.
Nota: He utilizado el findbugs.jar
en lugar de annotations.jar
y jsr305.jar
pero me da los mismos resultados con este comando:
javac -d . -classpath ${FINDBUGS_HOME}/lib/annotations.jar:${FINDBUGS_HOME}/lib/jsr305.jar FindBugsAnnotationsTest.java