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");
    }
}
¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top