
การสนับสนุนข้อผิดพลาดที่ได้รับการสนับสนุนเป็นส่วนขยายที่ไม่ได้รับการปรับแต่งปิคนิคของข้อผิดพลาดของ Google มันมีจุดมุ่งหมายเพื่อปรับปรุงคุณภาพของรหัสเพ่งความสนใจไปที่การบำรุงรักษาความสอดคล้องและการหลีกเลี่ยงข้อผิดพลาดทั่วไป
ข้อผิดพลาดเกิดขึ้นเป็นเครื่องมือวิเคราะห์แบบคงที่สำหรับ Java ที่จับข้อผิดพลาดในการเขียนโปรแกรมทั่วไปในเวลาคอมไพล์
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับข้อผิดพลาดที่เกิดขึ้น (สนับสนุน) วิธีที่คุณสามารถเริ่มใช้ข้อผิดพลาดได้ง่ายในทางปฏิบัติและวิธีที่เราใช้ในการปิคนิคดูการพูดคุยการประชุม โดยอัตโนมัติแมลงที่มีข้อผิดพลาดเกิดขึ้นในทางปฏิบัติ ลองพิจารณาตรวจสอบบล็อกโพสต์ ปิคนิครักข้อผิดพลาดได้ง่าย: การผลิตรหัส Java คุณภาพสูงและสอดคล้องกัน
การเริ่มต้นใช้งาน•การพัฒนาข้อผิดพลาดการสนับสนุนได้ง่าย•วิธีการทำงาน•การมีส่วนร่วม
ห้องสมุดนี้สร้างขึ้นบนข้อผิดพลาดได้ง่าย หากต้องการใช้ให้อ่านคู่มือการติดตั้งสำหรับ Maven หรือ Gradle ด้านล่าง ห้องสมุดต้องการให้การสร้างของคุณดำเนินการโดยใช้ JDK 17 หรือสูงกว่า แต่รองรับการสร้างที่กำหนดเป้าหมาย Java รุ่นเก่ากว่า
ก่อนอื่นให้ทำตามคู่มือการติดตั้งข้อผิดพลาด
ถัดไปแก้ไขไฟล์ pom.xml ของคุณเพื่อเพิ่มข้อผิดพลาดอย่างน้อยหนึ่งโมดูลสนับสนุนการสนับสนุนไปยัง annotationProcessorPaths ของ 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 > ก่อนอื่นให้ทำตามคู่มือการติดตั้งของ gradle-errorprone-plugin
ถัดไปแก้ไขไฟล์ build.gradle ของคุณเพื่อเพิ่มข้อผิดพลาดอย่างน้อยหนึ่งโมดูลสนับสนุนการสนับสนุน:
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
}พิจารณารหัสตัวอย่างต่อไปนี้:
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 );
}
}หากการติดตั้งประสบความสำเร็จการสร้างรหัสด้านบนด้วย Maven ควรให้คำเตือนคอมไพเลอร์สองครั้ง:
$ 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() { ' ?
...สองสิ่งกำลังเตะที่นี่:
BugChecker ที่ตั้งค่าสถานะการแปลงข้อมูลประจำตัวที่ไม่จำเป็นBigDecimal.valueOf(0) และ new BigDecimal(0) ถึง BigDecimal.ZEROตรวจสอบให้แน่ใจว่าได้ตรวจสอบข้อผิดพลาดทั้งหมดและกฎ refaster
นี่คือโครงการ Maven ดังนั้นการใช้งาน mvn clean install จะทำการสร้างที่สะอาดเต็มรูปแบบและติดตั้งไลบรารีไปยังที่เก็บ Maven ในพื้นที่ของคุณ
เมื่อคุณทำการเปลี่ยนแปลงแล้วการสร้างอาจล้มเหลวเนื่องจากคำเตือนหรือข้อผิดพลาดที่ปล่อยออกมาจากการวิเคราะห์รหัสแบบคงที่ ธงและคำสั่งที่แสดงด้านล่างช่วยให้คุณสามารถระงับหรือ (ในชุดย่อยขนาดใหญ่) แก้ไขกรณีดังกล่าวโดยอัตโนมัติ ตรวจสอบให้แน่ใจว่าได้ตรวจสอบตัวเลือกที่มีอยู่อย่างระมัดระวังเนื่องจากสามารถประหยัดเวลาในการพัฒนาได้อย่างมาก!
พารามิเตอร์ Maven Build ที่เกี่ยวข้อง:
-Dverification.warn ทำการเตือนและข้อผิดพลาดที่ปล่อยออกมาจากปลั๊กอินต่างๆ-Dverification.skip ปิดใช้งานปลั๊กอินที่ไม่จำเป็นต่าง ๆ และรวบรวมรหัสด้วยการตรวจสอบน้อยที่สุด (เช่นโดยไม่ต้องผ้าสำลี, ข้อผิดพลาดการตรวจสอบได้ง่าย ฯลฯ )-Dversion.error-prone=some-version เรียกใช้งานบิลด์โดยใช้ข้อผิดพลาดที่ระบุได้ง่าย สิ่งนี้มีประโยชน์เช่นเมื่อทดสอบข้อผิดพลาดที่สร้างขึ้นในพื้นที่-Perror-prone-fork เรียกใช้งานบิลด์โดยใช้ข้อผิดพลาดของ Picnic Hosted Hosted on Jitpack โดยทั่วไปส้อมนี้มีการเปลี่ยนแปลงเล็กน้อยที่ด้านบนของการเปิดตัวข้อผิดพลาดล่าสุด-Pself-check เรียกใช้การตรวจสอบที่กำหนดโดยโครงการนี้กับตัวเอง รอการเปิดตัว Google/ข้อผิดพลาดได้ง่าย#3301 ธงนี้จะต้องใช้ร่วมกับ -Perror-prone-forkคำสั่งอื่น ๆ ที่เกี่ยวข้องสูง:
mvn fmt:format รหัสโดยใช้ google-java-format./run-full-build.sh สร้างโครงการสองครั้งโดยที่ผ่านครั้งที่สองตรวจสอบความเข้ากันได้กับข้อผิดพลาดของ Picnic และการปฏิบัติตามรหัสด้วยกฎใด ๆ ที่กำหนดไว้ในโครงการนี้ (พิจารณาเรียกใช้สิ่งนี้ก่อนที่จะเปิดคำขอดึงเนื่องจากการตรวจสอบประชาสัมพันธ์ยังทำการตรวจสอบความถูกต้องนี้ด้วย)./apply-error-prone-suggestions.sh ใช้ข้อผิดพลาดที่เกิดขึ้นได้ง่ายและข้อผิดพลาดรหัสสนับสนุนข้อเสนอแนะสำหรับโครงการนี้ ก่อนที่จะเรียกใช้คำสั่งนี้ตรวจสอบให้แน่ใจว่าได้ติดตั้งโครงการ ( mvn clean install ) และตรวจสอบให้แน่ใจว่าไดเรกทอรีการทำงานในปัจจุบันไม่มีการเปลี่ยนแปลงที่ไม่มีการแก้ไขหรือไม่มีการแก้ไข./run-branch-mutation-tests.sh ใช้ pitest เพื่อเรียกใช้การทดสอบการกลายพันธุ์กับรหัสที่ได้รับการแก้ไขเมื่อเทียบกับสาขาเริ่มต้นต้นน้ำ ผลลัพธ์สามารถตรวจสอบได้โดยการเปิดไฟล์ target/pit-reports/index.html ที่เกี่ยวข้อง หนึ่งสามารถใช้ ./run-mutation-tests.sh เพื่อเรียกใช้การทดสอบการกลายพันธุ์กับรหัส ทั้งหมด ในไดเรกทอรีการทำงานปัจจุบัน สำหรับข้อมูลเพิ่มเติมตรวจสอบปลั๊กอิน Pit Mavenเมื่อเรียกใช้การทดสอบของโครงการใน INTELLIJ IDEA คุณอาจเห็นข้อผิดพลาดต่อไปนี้:
java: exporting a package from system module jdk.compiler is not allowed with --release
หากสิ่งนี้เกิดขึ้นให้ไปที่ การตั้งค่า -> build, execution, การปรับใช้ -> คอมไพเลอร์ -> คอมไพเลอร์ Java และยกเลิกการเลือกตัวเลือก การใช้ ' -รีลีส' ตัวเลือกสำหรับการรวบรวมข้าม (Java 9 และใหม่กว่า) ดู IDEA-288052 สำหรับรายละเอียด
โครงการนี้ให้การใช้งาน BugChecker เพิ่มเติม
ต้องการรายงานหรือแก้ไขข้อผิดพลาดแนะนำหรือเพิ่มคุณสมบัติใหม่หรือปรับปรุงเอกสาร? สุดยอดมาก! โปรดอ่านแนวทางการบริจาคของเรา
หากคุณต้องการรายงานช่องโหว่ด้านความปลอดภัยโปรดทำผ่านช่องส่วนตัว โปรดดูนโยบายความปลอดภัยของเราสำหรับรายละเอียด