Findbugs usando anotações JSR305 no eclipse não é encontrar erros
-
19-09-2019 - |
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");
}
}
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