Domanda

Ho avuto modo di sperimentare con JSR 305 annotazioni per l'utilizzo con Findbugs, in particolare la @CheckForNull annotazione che avrebbe evitato un bug Ho appena scoperto che lo rende ai clienti. Ho aggiunto jsr305.jar e annotations.jar al mio percorso di generazione, ma gli insetti non si trovano da findbugs. Sto usando Eclipse con il plugin di Eclipse Findbugs. Di seguito è riportato un codice di esempio che mostra lo stesso problema, ma non lo fa quando ho eseguito findbugs su di esso trovare il bug. Ho provato questo in Eclipse Galileo e Ganimede.

public class FindBugsAnnotationsTest {

    ArrayList<String> canBeNull;

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

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

        getCanBeNull().add("a string");
    }
}
È stato utile?

Soluzione

Questo può essere ovvio, ma penso che i vostri problemi sono con Eclipse (forse il plugin FindBugs in particolare), non si FindBugs.

Si potrebbe prendere in considerazione l'esecuzione FindBugs dalla riga di comando per eliminare eventuali problemi di Eclipse e assicurarsi di avere FindBugs in esecuzione correttamente nel proprio. Sapere come eseguire FindBugs in una modalità autonoma vi darà un ripiego quando il vostro IDE non è configurato correttamente.

Ho salvato il codice sorgente in un file chiamato FindBugsAnnotationsTest.java, le importazioni per List, ArrayList, e CheckForNull, compilato aggiunto, e corse FindBugs 1.3.9. FindBugs genera diversi avvertimenti circa i valori nulli:

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

Queste sono le importazioni che ho aggiunto alla parte superiore del FindBugsAnnotationsTest.java:

import java.util.ArrayList;
import java.util.List;
import edu.umd.cs.findbugs.annotations.CheckForNull;

Comandi:

javac -d . -classpath ${FINDBUGS_HOME}/lib/findbugs.jar FindBugsAnnotationsTest.java
${FINDBUGS_HOME}/bin/findbugs FindBugsAnnotationsTest.class

Dove ${FINDBUGS_HOME} è la directory in cui è installato Findbugs 1.3.9. javac si presume essere sulla strada.

Nota: ho usato il findbugs.jar invece di annotations.jar e jsr305.jar ma ottengo gli stessi risultati con questo comando:

javac -d . -classpath ${FINDBUGS_HOME}/lib/annotations.jar:${FINDBUGS_HOME}/lib/jsr305.jar FindBugsAnnotationsTest.java
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top