Wenn Sie mit PMD eine bestimmte Warnung ignorieren möchten, können Sie // NOPMD
verwenden, damit diese Zeile ignoriert wird.Gibt es eine Möglichkeit, eine einzelne FindBugs-Warnung zu ignorieren?
Gibt es etwas Ähnliches für FindBugs?
Wenn Sie mit PMD eine bestimmte Warnung ignorieren möchten, können Sie // NOPMD
verwenden, damit diese Zeile ignoriert wird.Gibt es eine Möglichkeit, eine einzelne FindBugs-Warnung zu ignorieren?
Gibt es etwas Ähnliches für FindBugs?
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
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.
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.
'java.lang.SuppressWarnings' kann nicht funktionieren. Es hat eine Quellenretention und ist daher nicht für Findbugs sichtbar. –
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
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
Sie können stattdessen kompilieren net.sourceforge.findbugs: Anmerkungen: 1.3.2'' Syntax, die kürzer ist. –
+1, aber bitte aktualisieren Sie Ihre Antwort mit: grdle 'testCompile 'com.google.code.findbugs: Anmerkungen: 3.0.0'' und Annotationsname' @ SuppressFBWarnings' –
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
+1 für Ihren Kommentar: „Ich weiß, was ich tue“ – dhiller
Bonus Frage: Wie finde ich den entsprechenden Wert für eine gegebene berichtet „Bug“ (unter Verwendung von Sonar)? – PlanBForOpenOffice
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 :( –