web-dev-qa-db-fra.com

Est-il possible d'ignorer un seul avertissement FindBugs?

Avec PMD, si vous souhaitez ignorer un avertissement spécifique, vous pouvez utiliser // NOPMD pour que cette ligne soit ignorée.

Y a-t-il quelque chose de similaire pour FindBugs?

174
Ben S

L'approche initiale de FindBugs implique des fichiers de configuration XML, à savoir filtres . C’est vraiment moins pratique que la solution PMD, mais FindBugs fonctionne sur du bytecode et non sur du code source. Les commentaires ne sont donc é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 a plus tard introduit une autre solution basée sur annotations (voir SuppressFBWarnings ) que vous pouvez utiliser au niveau de la classe ou de la méthode. (plus pratique que XML à mon avis). Exemple (peut-être pas le meilleur, mais bon, c'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 est obsolète en faveur de @SuppressFBWarnings en raison du conflit de noms avec le SuppressWarnings de Java.

286
Pascal Thivent

Comme d'autres l'ont mentionné, vous pouvez utiliser le @SuppressFBWarnings Annotation. 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 soucie pas du package dans lequel 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

18
hinneLinks

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

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

Si vous utilisez le plugin Android Studio FindBugs, accédez à votre fichier de filtre XML en utilisant Fichier-> Autres paramètres-> Paramètres par défaut-> Autres paramètres-> FindBugs-IDEA-> Filtre-> Exclure filtrer les fichiers-> Ajouter.

15
mbonness

Update Gradle

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

Localisez le rapport FindBugs

file: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html

Trouver le message spécifique

find bugs

Importer la version correcte de l'annotation

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

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

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")

Voir ici pour plus d'informations: findbugs Spring Annotation

9
anataliocs

Au moment de la rédaction de cet article (mai 2018), FindBugs semble avoir été remplacé par SpotBugs . L'utilisation de l'annotation SuppressFBWarnings nécessite que votre code soit compilé avec Java 8 ou version ultérieure et introduit une dépendance à la compilation sur spotbugs-annotations.jar.

L'utilisation d'un fichier de filtre pour filtrer les règles SpotBugs ne pose pas ce problème. La documentation est ici .

6
steve