Findbugs à l'aide des annotations JSR305 dans Eclipse ne trouve pas de bugs
-
19-09-2019 - |
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");
}
}
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
Où ${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