2009-12-02 15 views

Antwort

250

Der erste Ansatz von FindBugs umfasst XML-Konfigurationsdateien alias filters. Das ist wirklich weniger praktisch als die PMD-Lösung, aber FindBugs arbeitet mit Bytecode, nicht mit Quellcode, also sind Kommentare natürlich keine Option. Beispiel:

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

, aber dieses Problem zu lösen, führte FindBugs später eine andere Lösung basiert auf annotations (siehe SuppressFBWarnings), die Sie in der Klasse oder bei der Methode Ebene (bequemer als XML meiner Meinung nach) verwenden können. Beispiel (vielleicht nicht die beste, aber gut, 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 hat sich für @SuppressFBWarnings wegen des Namens Zusammenstoß mit Java SuppressWarnings veraltet. Hier

+79

+1 für Ihren Kommentar: „Ich weiß, was ich tue“ – dhiller

+4

Bonus Frage: Wie finde ich den entsprechenden Wert für eine gegebene berichtet „Bug“ (unter Verwendung von Sonar)? – PlanBForOpenOffice

+27

Das Problem, natürlich mit der Verwendung der Annotation Ansatz ist, dass Ihr Code eher unnötig importiert (und nachfolgende Abhängigkeit) die Findbugs-Bibliothek :( –

13

ist ein vollständigeres Beispiel eines XML-Filter (das Beispiel ist für sich genommen nicht funktionieren, da es nur einen Ausschnitt zeigt und fehlt die <FindBugsFilter> beginnen und End-Tags):

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

Wenn Sie Mit dem Eclipse-FindBugs-Plugin navigieren Sie zu Ihrer XML-Filterdatei unter Fenster-> Einstellungen-> Java-> FindBugs-> Filterdateien-> Filterdateien ausschließen-> Hinzufügen.

-5

Ich werde diese eine hier verlassen: https://stackoverflow.com/a/14509697/1356953

Bitte beachten Sie, dass dies funktioniert mit java.lang.SuppressWarnings also keine Notwendigkeit, eine separate Annotation zu verwenden.

@SuppressWarnings auf einem Feld unterdrückt nur findbugs Warnungen für dieses Feld Erklärung berichtete, nicht jede Warnung im Zusammenhang mit das Feld.

Zum Beispiel diese unterdrückt das "Feld immer nur auf null gesetzt" Warnung:

@SuppressWarnings ("UWF_NULL_FIELD") String s = null; Ich denke, die beste können Sie tun, ist der Code mit der Warnung in die kleinste Methode isolieren können Sie, dann unterdrücken Sie die Warnung auf die gesamte Methode.

+5

'java.lang.SuppressWarnings' kann nicht funktionieren. Es hat eine Quellenretention und ist daher nicht für Findbugs sichtbar. –

5

aktualisieren Gradle

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

Suchen Sie den FindBugs Bericht

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

Finden Sie die spezifische Nachricht

find bugs

Importieren Sie die richtige Version der Anmerkung

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

die Anmerkung direkt über dem problematischen Code hinzufügen

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX") 

Sehen Sie hier für weitere Informationen: findbugs Spring Annotation

+1

Sie können stattdessen kompilieren net.sourceforge.findbugs: Anmerkungen: 1.3.2'' Syntax, die kürzer ist. –

+1

+1, aber bitte aktualisieren Sie Ihre Antwort mit: grdle 'testCompile 'com.google.code.findbugs: Anmerkungen: 3.0.0'' und Annotationsname' @ SuppressFBWarnings' –

10

Wie andere schon erwähnt, können Sie die @SuppressFBWarnings Annotation verwenden. Wenn Sie Ihrem Code keine weitere Abhängigkeit hinzufügen möchten oder können, können Sie die Anmerkung selbst zu Ihrem Code hinzufügen, Findbugs interessiert nicht, in welchem ​​Paket die Anmerkung enthalten ist.

@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

Verwandte Themen