Antworten:
Der anfängliche Ansatz von FindBugs umfasst XML-Konfigurationsdateien, auch Filter genannt . Dies ist wirklich weniger praktisch als die PMD-Lösung, aber FindBugs arbeitet mit Bytecode, nicht mit dem Quellcode, sodass Kommentare offensichtlich keine Option sind. 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, führte FindBugs später eine andere Lösung ein, die auf Anmerkungen basiert (siehe SuppressFBWarnings
), die Sie auf Klassen- oder 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 FindBugs 3.0.0 aufgrund des Namenskonflikts mit Java SuppressWarnings
zugunsten von veraltet @SuppressFBWarnings
ist SuppressWarnings
.
<dependency> <groupId>net.sourceforge.findbugs</groupId> <artifactId>annotations</artifactId> <version>1.3.2</version> <scope>provided</scope> </dependency>
<dependency><groupId>com.google.code.findbugs</groupId><artifactId>annotations</artifactId><version>3.0.0</version><scope>provided</scope></dependency>
ihren POM erweitern, wenn sie ihn verwenden möchten @SuppressFBWarnings
.
Wie bereits erwähnt, können Sie die @SuppressFBWarnings
Anmerkung 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 ist es egal, in welchem Paket sich die Anmerkung befindet.
@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 vollständigeres Beispiel für einen XML-Filter (das obige Beispiel allein funktioniert nicht, da nur ein Snippet angezeigt wird und die <FindBugsFilter>
Start- und End-Tags fehlen ):
<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, navigieren Sie zu Ihrer XML-Filterdatei über Datei-> Andere Einstellungen-> Standardeinstellungen-> Andere Einstellungen-> FindBugs-IDEA-> Filter-> Filterdateien ausschließen-> Hinzufügen.
Gradle aktualisieren
dependencies {
compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}
Suchen Sie den FindBugs-Bericht
Datei: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html
Suchen Sie die spezifische Nachricht
Importieren Sie die richtige Version der Anmerkung
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
Fügen Sie die Anmerkung direkt über dem fehlerhaften Code hinzu
@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
Weitere Informationen finden Sie hier: findbugs Spring Annotation
compile 'net.sourceforge.findbugs:annotations:1.3.2'
stattdessen eine kürzere Syntax verwenden.
testCompile 'com.google.code.findbugs:annotations:3.0.0'
und Annotation Name@SuppressFBWarnings
Zum Zeitpunkt des Schreibens (Mai 2018) scheint FindBugs durch SpotBugs ersetzt worden zu sein . Für die Verwendung der SuppressFBWarnings
Annotation muss Ihr Code mit Java 8 oder höher kompiliert werden, und es wird eine Abhängigkeit von der Kompilierungszeit eingeführt spotbugs-annotations.jar
.
Die Verwendung einer Filterdatei zum Filtern von SpotBugs-Regeln weist keine derartigen Probleme auf. Die Dokumentation finden Sie hier .
Während andere Antworten hier gültig sind, sind sie kein vollständiges Rezept, um dies zu lösen.
Im Sinne der Vollständigkeit:
Sie müssen die Findbugs-Annotationen in Ihrer POM-Datei haben - sie haben nur Kompilierungszeit, damit Sie den folgenden provided
Bereich verwenden können:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>findbugs-annotations</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Dies ermöglicht die Verwendung einer @SuppressFBWarnings
anderen Abhängigkeit, die bereitstellt @SuppressWarnings
. Das Obige ist jedoch klarer.
Dann fügen Sie die Anmerkung über Ihrer Methode hinzu:
Z.B
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE",
justification = "Scanning generated code of try-with-resources")
@Override
public String get() {
try (InputStream resourceStream = owningType.getClassLoader().getResourceAsStream(resourcePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, UTF_8))) { ... }
Dies beinhaltet sowohl den Namen des Fehlers als auch einen Grund, warum Sie den Scan dafür deaktivieren.
Ich werde dieses hier lassen: https://stackoverflow.com/a/14509697/1356953
Bitte beachten Sie, dass dies funktioniert, java.lang.SuppressWarnings
sodass keine separate Anmerkung erforderlich ist.
@SuppressWarnings in einem Feld unterdrückt nur Findbugs-Warnungen, die für diese Felddeklaration gemeldet wurden, nicht jede Warnung, die diesem Feld zugeordnet ist.
Dies unterdrückt beispielsweise die Warnung "Feld immer nur auf Null gesetzt":
@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, die Sie können, und dann die Warnung für die gesamte Methode zu unterdrücken.
java.lang.SuppressWarnings
kann nicht arbeiten. Es hat eine Quellenaufbewahrung und ist daher für Findbugs nicht sichtbar.