
Dukungan rawan kesalahan adalah ekstensi piknik-opinion dari rawan kesalahan Google. Ini bertujuan untuk meningkatkan kualitas kode, fokus pada pemeliharaan, konsistensi dan penghindaran jebakan umum.
Rawan kesalahan adalah alat analisis statis untuk Java yang menangkap kesalahan pemrograman umum pada waktu kompilasi.
Untuk mempelajari lebih lanjut tentang kesalahan rentan (dukungan), bagaimana Anda dapat mulai menggunakan kesalahan rentan dalam praktik, dan bagaimana kami menggunakannya di piknik, saksikan konferensi pembicaraan mengotomatiskan bug dengan kesalahan dalam praktik . Juga pertimbangkan untuk memeriksa posting blog Picnic Loves Rawan kesalahan: Memproduksi kode Java berkualitas tinggi dan konsisten .
Memulai • Mengembangkan Dukungan Rawan Kesalahan • Cara Kerjanya • Berkontribusi
Perpustakaan ini dibangun di atas rawan kesalahan. Untuk menggunakannya, baca panduan instalasi untuk Maven atau Gradle di bawah ini. Perpustakaan mengharuskan bangunan Anda dieksekusi menggunakan JDK 17 atau lebih, tetapi mendukung bangunan yang menargetkan versi Java yang lebih lama.
Pertama, ikuti Panduan Instalasi Rawan Kesalahan.
Selanjutnya, edit file pom.xml Anda untuk menambahkan satu atau lebih modul dukungan rawan kesalahan ke annotationProcessorPaths dari maven-compiler-plugin :
< build >
< pluginManagement >
< plugins >
< plugin >
< groupId >org.apache.maven.plugins</ groupId >
< artifactId >maven-compiler-plugin</ artifactId >
<!-- Prefer using the latest release. -->
< version >3.12.0</ version >
< configuration >
< annotationProcessorPaths >
<!-- Error Prone itself. -->
< path >
< groupId >com.google.errorprone</ groupId >
< artifactId >error_prone_core</ artifactId >
< version >${error-prone.version}</ version >
</ path >
<!-- Error Prone Support's additional bug checkers. -->
< path >
< groupId >tech.picnic.error-prone-support</ groupId >
< artifactId >error-prone-contrib</ artifactId >
< version >${error-prone-support.version}</ version >
</ path >
<!-- Error Prone Support's Refaster rules. -->
< path >
< groupId >tech.picnic.error-prone-support</ groupId >
< artifactId >refaster-runner</ artifactId >
< version >${error-prone-support.version}</ version >
</ path >
</ annotationProcessorPaths >
< compilerArgs >
< arg >
-Xplugin:ErrorProne
<!-- Add other Error Prone flags here. See
https://errorprone.info/docs/flags. -->
</ arg >
< arg >-XDcompilePolicy=simple</ arg >
</ compilerArgs >
<!-- Enable this if you'd like to fail your build upon warnings. -->
<!-- <failOnWarning>true</failOnWarning> -->
</ configuration >
</ plugin >
</ plugins >
</ pluginManagement >
</ build > Pertama, ikuti panduan instalasi dari gradle-errorprone-plugin .
Selanjutnya, edit file build.gradle Anda untuk menambahkan satu atau lebih modul dukungan rawan kesalahan:
dependencies {
// Error Prone itself.
errorprone( " com.google.errorprone:error_prone_core: ${ errorProneVersion } " )
// Error Prone Support's additional bug checkers.
errorprone( " tech.picnic.error-prone-support:error-prone-contrib: ${ errorProneSupportVersion } " )
// Error Prone Support's Refaster rules.
errorprone( " tech.picnic.error-prone-support:refaster-runner: ${ errorProneSupportVersion } " )
}
tasks . withType( JavaCompile ) . configureEach {
options . errorprone . disableWarningsInGeneratedCode = true
// Add other Error Prone flags here. See:
// - https://github.com/tbroyer/gradle-errorprone-plugin#configuration
// - https://errorprone.info/docs/flags
}Pertimbangkan kode contoh berikut:
import com . google . common . collect . ImmutableSet ;
import java . math . BigDecimal ;
public class Example {
static BigDecimal getNumber () {
return BigDecimal . valueOf ( 0 );
}
public ImmutableSet < Integer > getSet () {
ImmutableSet < Integer > set = ImmutableSet . of ( 1 );
return ImmutableSet . copyOf ( set );
}
}Jika instalasi berhasil, maka membangun kode di atas dengan Maven harus menghasilkan dua peringatan kompiler:
$ mvn clean install
...
[INFO] Example.java:[9,34] [Refaster Rule] BigDecimalRules.BigDecimalZero: Refactoring opportunity
(see https://error-prone.picnic.tech/refasterrules/BigDecimalRules#BigDecimalZero)
Did you mean ' return BigDecimal.ZERO; ' ?
...
[WARNING] Example.java:[13,35] [IdentityConversion] This method invocation appears redundant ; remove it or suppress this warning and add a comment explaining its purpose
(see https://error-prone.picnic.tech/bugpatterns/IdentityConversion)
Did you mean ' return set; ' or ' @SuppressWarnings("IdentityConversion") public ImmutableSet<Integer> getSet() { ' ?
...Dua hal menendang di sini:
BugChecker rawan kesalahan yang menandai konversi identitas yang tidak perlu.BigDecimal.valueOf(0) dan new BigDecimal(0) ke BigDecimal.ZERO .Pastikan untuk memeriksa semua peraturan bug dan aturan refaster.
Ini adalah proyek Maven, jadi menjalankan mvn clean install melakukan pembuatan bersih penuh dan memasang perpustakaan ke repositori Maven lokal Anda.
Setelah Anda melakukan perubahan, build mungkin gagal karena peringatan atau kesalahan yang dipancarkan dengan analisis kode statis. Bendera dan perintah yang tercantum di bawah ini memungkinkan Anda untuk menekan atau (dalam sebagian besar kasus) secara otomatis memperbaiki kasus tersebut. Pastikan untuk memeriksa opsi yang tersedia dengan cermat, karena ini dapat menghemat waktu pengembangan yang signifikan!
Parameter Maven Build yang relevan:
-Dverification.warn membuat peringatan dan kesalahan yang dipancarkan oleh berbagai plugin dan kompiler java non-fatal, jika memungkinkan.-Dverification.skip menonaktifkan berbagai plugin yang tidak penting dan mengkompilasi kode dengan pemeriksaan minimal (yaitu tanpa serat, cek rawan kesalahan, dll.).-Dversion.error-prone=some-version menjalankan build menggunakan versi rawan kesalahan yang ditentukan. Ini berguna misalnya saat menguji snapshot rawan kesalahan yang dibangun secara lokal.-Perror-prone-fork menjalankan build menggunakan fork kesalahan piknik, yang di-host di Jitpack. Garpu ini umumnya berisi beberapa perubahan di atas rilis rawan kesalahan terbaru.-Pself-check menjalankan cek yang ditentukan oleh proyek ini terhadap dirinya sendiri. Tertunda rilis Google/ERROR-FONE#3301, bendera ini saat ini harus digunakan dalam kombinasi dengan -Perror-prone-fork .Perintah lain yang sangat relevan:
mvn fmt:format Format Kode menggunakan google-java-format ../run-full-build.sh membangun proyek dua kali, di mana lulus kedua memvalidasi kompatibilitas dengan garpu rentan kesalahan piknik dan kepatuhan kode dengan aturan apa pun yang ditentukan dalam proyek ini. (Pertimbangkan menjalankan ini sebelum membuka permintaan tarik, karena pemeriksaan PR juga melakukan validasi ini.)./apply-error-prone-suggestions.sh sugestions.sh menerapkan kesalahan kode dukungan rentan kesalahan dan kesalahan untuk proyek ini. Sebelum menjalankan perintah ini, pastikan untuk menginstal proyek ( mvn clean install ) dan pastikan bahwa direktori kerja saat ini tidak mengandung perubahan yang tidak di -tidak diadakan atau tidak terikat../run-branch-mutation-tests.sh menggunakan pitest untuk menjalankan tes mutasi terhadap kode yang dimodifikasi relatif terhadap cabang default hulu. Hasilnya dapat ditinjau dengan membuka file target/pit-reports/index.html masing-masing. Seseorang dapat menggunakan ./run-mutation-tests.sh untuk menjalankan tes mutasi terhadap semua kode di direktori kerja saat ini. Untuk informasi lebih lanjut, periksa plugin Pit Maven.Saat menjalankan tes proyek di IntelliJ Ide, Anda mungkin melihat kesalahan berikut:
java: exporting a package from system module jdk.compiler is not allowed with --release
Jika ini terjadi, buka Pengaturan -> Bangun, Eksekusi, Deployment -> Compiler -> Java Compiler dan hapus pilihan opsi Gunakan ' - -Rilis' opsi untuk kompilasi silang (Java 9 dan lebih baru) . Lihat Ide-288052 untuk detailnya.
Proyek ini menyediakan implementasi BugChecker tambahan.
Ingin melaporkan atau memperbaiki bug, menyarankan atau menambahkan fitur baru, atau meningkatkan dokumentasi? Itu luar biasa! Baca pedoman kontribusi kami.
Jika Anda ingin melaporkan kerentanan keamanan, silakan lakukan melalui saluran pribadi; Silakan lihat kebijakan keamanan kami untuk detailnya.