Jawaban:
Pendekatan awal FindBugs melibatkan file konfigurasi XML alias filter . Ini benar-benar kurang nyaman daripada solusi PMD tetapi FindBugs bekerja pada bytecode, bukan pada kode sumber, jadi komentar jelas bukan pilihan. Contoh:
<Match>
<Class name="com.mycompany.Foo" />
<Method name="bar" />
<Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>
Namun, untuk mengatasi masalah ini, FindBugs kemudian memperkenalkan solusi lain berdasarkan anotasi (lihat SuppressFBWarnings
) yang dapat Anda gunakan di kelas atau di tingkat metode (lebih nyaman daripada XML menurut saya). Contoh (mungkin bukan yang terbaik tetapi, well, itu hanya contoh):
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value="HE_EQUALS_USE_HASHCODE",
justification="I know what I'm doing")
Perhatikan bahwa sejak FindBugs 3.0.0 SuppressWarnings
tidak digunakan lagi @SuppressFBWarnings
karena bentrok nama dengan Java 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>
ke POM mereka jika ingin menggunakannya @SuppressFBWarnings
.
Seperti yang disebutkan orang lain, Anda dapat menggunakan @SuppressFBWarnings
Anotasi. Jika Anda tidak ingin atau tidak dapat menambahkan Ketergantungan lain ke kode Anda, Anda dapat menambahkan Anotasi ke Kode Anda sendiri, Findbugs tidak peduli di mana Paket Anotasi itu berada.
@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 "";
}
Sumber: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88
Berikut adalah contoh filter XML yang lebih lengkap (contoh di atas dengan sendirinya tidak akan berfungsi karena hanya memperlihatkan cuplikan dan tidak ada <FindBugsFilter>
tag awal dan akhir):
<FindBugsFilter>
<Match>
<Class name="com.mycompany.foo" />
<Method name="bar" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
</FindBugsFilter>
Jika Anda menggunakan plugin Android Studio FindBugs, telusuri file filter XML Anda menggunakan File-> Pengaturan Lainnya-> Pengaturan Default-> Pengaturan Lainnya-> FindBugs-IDEA-> Filter-> Kecualikan file filter-> Tambah.
Perbarui Gradle
dependencies {
compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}
Temukan Laporan FindBugs
file: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html
Temukan pesan spesifik
Impor versi anotasi yang benar
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
Tambahkan anotasi langsung di atas kode yang menyinggung
@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
Lihat di sini untuk info lebih lanjut: Annotation Spring Annotation
compile 'net.sourceforge.findbugs:annotations:1.3.2'
sintaks yang lebih pendek.
testCompile 'com.google.code.findbugs:annotations:3.0.0'
dan nama anotasi@SuppressFBWarnings
Pada saat penulisan ini (Mei 2018), FindBugs tampaknya telah digantikan oleh SpotBugs . MenggunakanSuppressFBWarnings
anotasi membutuhkan kode Anda untuk dikompilasi dengan Java 8 atau lebih baru dan memperkenalkan ketergantungan waktu kompilasi spotbugs-annotations.jar
.
Menggunakan file filter untuk memfilter aturan SpotBugs tidak memiliki masalah seperti itu. Dokumentasinya ada di sini .
Sementara jawaban lain di sini valid, mereka bukan resep lengkap untuk menyelesaikan ini.
Dalam semangat kelengkapan:
Anda harus memiliki anotasi findbugs dalam file pom Anda - mereka hanya mengkompilasi waktu, sehingga Anda dapat menggunakan provided
cakupan:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>findbugs-annotations</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Ini memungkinkan penggunaan @SuppressFBWarnings
ada ketergantungan lain yang menyediakan @SuppressWarnings
. Namun, hal di atas lebih jelas.
Kemudian Anda menambahkan anotasi di atas metode Anda:
Misalnya
@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))) { ... }
Ini termasuk nama bug dan juga alasan mengapa Anda menonaktifkan pemindaian untuk itu.
Saya akan meninggalkan yang ini di sini: https://stackoverflow.com/a/14509697/1356953
Harap dicatat bahwa ini berfungsi dengan baik java.lang.SuppressWarnings
sehingga tidak perlu menggunakan anotasi terpisah.
@SuppressWarnings pada bidang hanya menekan peringatan findbugs yang dilaporkan untuk deklarasi bidang itu, tidak setiap peringatan yang terkait dengan bidang itu.
Misalnya, ini menekan peringatan "Field only ever set to null":
@SuppressWarnings ("UWF_NULL_FIELD") String s = null; Saya pikir yang terbaik yang dapat Anda lakukan adalah mengisolasi kode dengan peringatan ke dalam metode terkecil yang Anda bisa, kemudian menekan peringatan pada seluruh metode.
java.lang.SuppressWarnings
tidak bisa bekerja Ini memiliki retensi sumber, sehingga tidak terlihat oleh bug.