Frage

Wenn Sie eine bestimmte Warnung ignorieren möchten, können Sie mit PMD verwenden // NOPMD Diese Linie zu ignorieren.

Gibt es etwas Ähnliches für Findbugs?

War es hilfreich?

Lösung

Der anfängliche Ansatz von FindBugs umfasst XML -Konfigurationsdateien, auch bekannt als AKA Filter. Dies ist wirklich weniger bequem als die PMD -Lösung, aber Findbugs funktioniert auf Bytecode, nicht im Quellcode, daher sind Kommentare offensichtlich keine Option. Beispiel:

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

Um dieses Problem zu lösen, haben Findbugs später eine andere Lösung basierend auf Anmerkungen (sehen SuppressFBWarnings), Die Sie in der Klasse oder auf Methodenebene verwenden können (meiner Meinung nach bequemer als XML). Beispiel (vielleicht nicht das beste, aber es ist nur ein Beispiel):

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

Beachten Sie, dass seit Findbugs 3.0.0 SuppressWarnings wurde zugunsten von veraltet @SuppressFBWarnings Wegen des Namens gegen Java's SuppressWarnings.

Andere Tipps

Wie andere erwähnt, können Sie die verwenden @SuppressFBWarnings Anmerkung. Wenn Sie Ihrem Code nicht eine weitere Abhängigkeit hinzufügen möchten oder nicht hinzufügen können, können Sie die Annotation Ihrem Code selbst hinzufügen.

@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 "";
}

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

Hier ist ein umfassenderes Beispiel für einen XML <FindBugsFilter> Tags beginnen und End -Tags):

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

Wenn Sie das Android Studio Findbugs-Plugin verwenden, durchsuchen Sie Ihre XML-Filterdatei mit Datei-> Andere Einstellungen-> Standardeinstellungen-> Andere Einstellungen-> findbugs-idea-> filter-> filterdateien-> add.

Update Gradle

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

Suchen Sie den Findbugs -Bericht

Datei: ///users/your_user/ideafrojects/projectname/build/reports/findbugs/main.html

Finden Sie die spezifische Nachricht

find bugs

Importieren Sie die richtige Version der Annotation

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

Fügen Sie die Annotation direkt über dem beleidigenden Code hinzu

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")

Weitere Informationen finden Sie hier: Findbugs Spring Annotation

Zum Zeitpunkt des Schreibens (Mai 2018) scheint Findbugs durch ersetzt worden zu sein Spotbugs. Verwendung der SuppressFBWarnings Bei Annotation muss Ihr Code mit Java 8 oder später kompiliert werden und eine Kompilierungszeitabhängigkeit einführt spotbugs-annotations.jar.

Die Verwendung einer Filterdatei zum Filter -Spotbugs -Regeln hat keine solchen Probleme. Die Dokumentation ist hier.

Ich werde das hier lassen: https://stackoverflow.com/a/14509697/1356953

Bitte beachten Sie, dass dies mit funktioniert java.lang.SuppressWarningsSie müssen also keine separate Annotation verwenden.

@SuppressWarnings auf einem Feld unterdrückt nur Fundbugs, die für diese Felddeklaration gemeldet wurden, nicht jede mit diesem Feld verbundene Warnung.

Dies unterdrückt beispielsweise die Warnung "Feld nur auf Null":

@SuppressWarnings ("uwf_null_field") String s = null; Ich denke, das Beste, was Sie tun können, ist, den Code mit der Warnung in die kleinste Methode zu isolieren, und dann die Warnung bei der gesamten Methode zu unterdrücken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top