2010-05-07 3 views
4

Tenir compte un tel codeExiste-t-il un moyen de supposer @Nullable par défaut? (En utilisant FindBugs ou tout autre outil gratuit)

public void m1(String text) { 
    if(text == null) 
     text = "<empty>"; 

    System.out.println(text.toLowerCase()); 
} 

Et ceci est une version buggy:

public void m1(String text) { 
    System.out.println(text.toLowerCase()); 
} 

Si la valeur nulle a été transmise, le NullPointerException peut être jeté. Je voudrais que l'outil d'analyse statique (par exemple FindBugs) signale ce problème. En vain, le FindBugs (au moins par défaut) me demande de spécifier explicitement l'annotation @Nullable. Le problème est que si j'oublie d'annoter, le bug sera manqué !!!

Comment puis-je faire en sorte que FindBugs (ou tout autre outil gratuit) assume @Nullable par défaut?

+0

Mais je croyais que nous vous avions dit que c'était * FindBugs *, pas Firebug;) – VonC

+0

Oh .. Désolé, j'ai corrigé la question ... Reflex :-) – alex2k8

+0

Par ailleurs, il semble que @DefaultAnnotationForParameters, mais ne peut pas l'obtenir travailler. – alex2k8

Répondre

2

Selon Javadoc:

@DefaultAnnotationForParameters indique que tous les membres de la classe ou de l'emballage doivent être annotés avec la valeur par défaut de la classe d'annotation fournie.

(BTW Javadocs pour @DefaultAnnotation, @DefaultAnnotationForFields et @DefaultAnnotationForMethods contiennent exactement le même texte).

Mais selon chapter 10 of FindBugs Manual:

Ceci est identique à la DefaultAnnotation sauf qu'il n'applys aux paramètres de la méthode.

Alors que theroretically soit

@DefaultAnnotationForParameters(value = Nullable.class) 

ou

@DefaultAnnotationForParameters({Nullable.class}) 

devrait fonctionner, deux ne le font pas.

Je ne sais pas si FindBugs soutient cela, mais avec JSR 305 vous pouvez également utiliser l'annotation @ParametersAreNullableByDefault appliquée à un paquet, classe ou méthode. Unfortunately FindBugs 1.3.9 ignores @ParametersAreNonnullByDefault and similar annotations (used on packages or on types).

+0

Est-ce que ça marche pour votre? Si oui, quelle est votre version (mine FindBug 1.3.9)? – alex2k8

+0

Essayé 1.3.7, 1.3.8, 1.3.9. J'ai ajouté des annotations pour la classe et pour le paquet (en utilisant package-info.java) - pas de chance ... – alex2k8

+1

peut-être que CheckForNull.class fonctionnera mieux comme l'annotation par défaut – TheDon

0

Vous pouvez écrire votre propre détecteur dans FindBugs qui recherche toute utilisation de paramètres qui ne sont pas null vérifié. Serait relativement simple à faire.

Questions connexes