Question

Je l'ai expérimenté avec les 305 annotations JSR pour une utilisation avec Findbugs, en particulier l'annotation @CheckForNull qui aurait évité un bug que je viens de découvrir ce qui en fait aux clients. J'ai ajouté jsr305.jar et annotations.jar à mon chemin de génération, mais les bugs ne sont pas trouvés findbugs. J'utilise Eclipse avec le plugin Eclipse Findbugs. Ci-dessous un exemple de code qui montre le même bug, mais ne pas quand je lance findbugs dessus trouver le bug. Je l'ai essayé dans Eclipse Galileo et Ganymède.

public class FindBugsAnnotationsTest {

    ArrayList<String> canBeNull;

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

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

        getCanBeNull().add("a string");
    }
}
Était-ce utile?

La solution

Cela peut être évident, mais je pense que vos problèmes sont avec Eclipse (peut-être le plugin FindBugs en particulier), non FindBugs lui-même.

Vous pourriez envisager d'exécuter FindBugs de la ligne de commande pour éliminer les problèmes d'Eclipse et vous assurer que vous avez correctement FindBugs en cours d'exécution dans son propre. Savoir comment exécuter FindBugs en mode autonome vous donnera une solution de repli lorsque votre IDE est pas configuré correctement.

Je sauvé votre code source dans un fichier nommé FindBugsAnnotationsTest.java, ajouté pour les importations List, ArrayList et CheckForNull, compilé et couru FindBugs 1.3.9. FindBugs génère plusieurs avertissements concernant les valeurs nulles:

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

Ce sont les importations que j'ai ajoutées au sommet de FindBugsAnnotationsTest.java:

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

Commandes:

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

${FINDBUGS_HOME} est le répertoire dans lequel Findbugs 1.3.9 est installé. javac est supposé être sur le chemin.

Note: je le findbugs.jar au lieu de annotations.jar et jsr305.jar mais je reçois les mêmes résultats avec cette commande:

javac -d . -classpath ${FINDBUGS_HOME}/lib/annotations.jar:${FINDBUGS_HOME}/lib/jsr305.jar FindBugsAnnotationsTest.java
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top