2009-12-02 20 views

Répondre

250

L'approche initiale de FindBugs implique des fichiers de configuration XML appelés filters. C'est vraiment moins pratique que la solution PMD mais FindBugs fonctionne sur le bytecode, pas sur le code source, donc les commentaires ne sont évidemment pas une option. Exemple:

<Match> 
    <Class name="com.mycompany.Foo" /> 
    <Method name="bar" /> 
    <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" /> 
</Match> 

Cependant, pour résoudre ce problème, FindBugs introduit plus tard une autre solution basée sur annotations (voir SuppressFBWarnings) que vous pouvez utiliser à la classe ou au niveau de la méthode (plus pratique que XML à mon avis). Exemple (peut-être pas le meilleur mais, eh bien, il est juste un exemple):

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="HE_EQUALS_USE_HASHCODE", 
    justification="I know what I'm doing") 

Notez que depuis FindBugs 3.0.0 SuppressWarnings a été dépréciée en faveur de @SuppressFBWarnings à cause du conflit de noms avec Java de SuppressWarnings.

+79

+1 pour votre commentaire "Je sais ce que je fais" – dhiller

+4

Question bonus: Comment puis-je trouver la valeur appropriée pour une donnée signalé "bug" (en utilisant le sonar)? – PlanBForOpenOffice

+27

Le problème, bien sûr avec l'utilisation de l'approche d'annotation est que votre code importe plutôt inutilement (et dépendances ultérieures) la bibliothèque Findbugs :( –

13

Voici un exemple plus complet d'un filtre XML (l'exemple ci-dessus par lui-même ne fonctionnera pas car il montre juste un extrait et il manque le <FindBugsFilter> balises début et fin):

<FindBugsFilter> 
    <Match> 
     <Class name="com.mycompany.foo" /> 
     <Method name="bar" /> 
     <Bug pattern="NP_BOOLEAN_RETURN_NULL" /> 
    </Match> 
</FindBugsFilter> 

Si vous êtes À l'aide du plugin Eclipse FindBugs, accédez à votre fichier de filtre XML à l'aide de Window-> Preferences-> Java-> FindBugs-> Filter files-> Exclude filter files-> Add.

-5

Je vais laisser celui-là: https://stackoverflow.com/a/14509697/1356953

S'il vous plaît noter que cela fonctionne avec java.lang.SuppressWarnings donc pas besoin d'utiliser une annotation séparée.

@SuppressWarnings sur un champ supprime uniquement des avertissements FindBugs déclarés pour cette déclaration sur le terrain, pas tous avertissement associé à ce domaine.

Par exemple, ceci supprime le champ "ne modifions null" avertissement :

@SuppressWarnings ("UWF_NULL_FIELD") String = null de; Je pense que le meilleur que vous pouvez faire est d'isoler le code avec l'avertissement dans la plus petite méthode que vous pouvez, puis supprimer l'avertissement sur la méthode entière.

+5

'java.lang.SuppressWarnings' ne peut pas fonctionner. Il a la rétention de source, donc n'est pas visible aux findbugs. –

5

Mise à jour Gradle

dependencies { 
    compile group: 'findbugs', name: 'findbugs', version: '1.0.0' 
} 

Localisez le rapport FindBugs

fichier

: /// Users/votre_utilisateur/IdeaProjects/ProjectName/construction/rapports/findbugs/main.html

Trouver le message spécifique

find bugs

Importer la version correcte de l'annotation

import edu.umd.cs.findbugs.annotations.SuppressWarnings; 

Ajouter l'annotation directement au-dessus du code incriminé

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX") 

Voir ici pour plus d'informations: findbugs Spring Annotation

+1

Vous pouvez utiliser la syntaxe 'compile 'net.sourceforge.findbugs: annotations: 1.3.2'' qui est plus courte. –

+1

+1, mais veuillez mettre à jour votre réponse avec: gradle 'testCompile 'com.google.code.findbugs: annotations: 3.0.0'' et nom d'annotation' @ SuppressFBWarnings' –

10

Comme d'autres Mentionnés, vous pouvez utiliser l'annotation @SuppressFBWarnings. Si vous ne voulez pas ou ne pouvez pas ajouter une autre dépendance à votre code, vous pouvez ajouter vous-même l'annotation à votre code, Findbugs ne se soucient pas de savoir dans quel paquet se trouve l'annotation.

@Retention(RetentionPolicy.CLASS) 
public @interface SuppressFBWarnings { 
    /** 
    * The set of FindBugs warnings that are to be suppressed in 
    * annotated element. The value can be a bug category, kind or pattern. 
    * 
    */ 
    String[] value() default {}; 

    /** 
    * Optional documentation of the reason why the warning is suppressed 
    */ 
    String justification() default ""; 
} 

Source: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88