Pergunta

Eu tenho experimentado com JSR 305 anotações para uso com Findbugs, especificamente a anotação @CheckForNull que teria evitado um erro Eu só descobri fazendo para fora para os clientes. Eu adicionei jsr305.jar e annotations.jar ao meu caminho de construção, mas os erros não são encontrados por findbugs. Estou usando o Eclipse com o plugin Eclipse Findbugs. Abaixo está um código de exemplo que mostra o mesmo bug, mas não quando eu corro findbugs sobre ele encontrar o bug. Eu tentei isso no Eclipse Galileo e Ganimedes.

public class FindBugsAnnotationsTest {

    ArrayList<String> canBeNull;

    @CheckForNull
    public List<String> getCanBeNull() {
        return canBeNull;
    }

    public void shouldGetFindbugsWarning() {
    canBeNull.add("a string");

        getCanBeNull().add("a string");
    }
}
Foi útil?

Solução

Isto pode ser óbvio, mas acho que seus problemas são com Eclipse (talvez o FindBugs do plugin em particular), não a própria FindBugs.

Você pode considerar correndo FindBugs a partir da linha de comando para eliminar quaisquer problemas de Eclipse e garantir que você tenha FindBugs que executam corretamente no seu próprio. Saber como executar FindBugs em um modo autônomo lhe dará um retorno quando o IDE não está configurado corretamente.

Salvei seu código-fonte em um arquivo chamado FindBugsAnnotationsTest.java, as importações adicionais para List, ArrayList e CheckForNull, compilados e FindBugs RAN 1.3.9. FindBugs gera vários avisos 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 são as importações que adicionei ao topo da 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

Onde ${FINDBUGS_HOME} é o diretório no qual Findbugs 1.3.9 está instalado. javac é assumido como estar no caminho.

Nota: Eu usei o findbugs.jar vez de annotations.jar e jsr305.jar mas eu obter os mesmos resultados com este comando:

javac -d . -classpath ${FINDBUGS_HOME}/lib/annotations.jar:${FINDBUGS_HOME}/lib/jsr305.jar FindBugsAnnotationsTest.java
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top