簡體   English   中英

注釋生成的Java源可空性(用於Kotlin)

[英]Annotating generated Java source nullability (for Kotlin)

我正在使用源生成工具( )為項目生成Java源文件。 但是,即使不是全部代碼,我也會在Kotlin中編寫大部分代碼。

Kotlin已經提供了出色的Java互操作性 ,因此使用生成的源代碼不是問題。 但是,由於Kotlin如何將Java的可為null的類型帶入可為null的系統中 ,所以我失去了使用Kotlin的大部分null-safe 在最好的情況下,我會發出有關平台類型的警告(使類型顯式以避免細微的錯誤); 在最壞的情況下,我會遇到意想不到的崩潰和細微的錯誤。

但是,Kotlin確實尊重可空性注釋 ,例如JSR-305,FindBugs,Lombok,Eclipse和JetBrains的@Nullable / @NonNull各自形式,將其作為適當的非null類型或可選形式引入。

因為代碼是生成的,並且我可以訪問源代碼(並了解它的工作原理),所以我知道哪些函數可以/不可以返回null ,並希望對它們進行注釋,以便它們巧妙地包含在我的null安全代碼中。 但是,我無法將注釋直接添加到代碼中,因為注釋是在構建步驟中生成的,並且會覆蓋任何手動更改。

為了在空安全代碼中使用,最好/最佳的方法是注釋生成的Java源的可空性嗎?

最好的方法是修改源代碼生成器,使其包含所需的注釋。

如果您不能修改生成器(例如,因為生成器是專有的並且您沒有其源代碼),則可以使用字節碼工程來實現。 例如,ASM站點上的此頁面提供了一種實現方法:

當然,無論哪種情況,您都需要某種方法來告訴工具(生成器,字節碼重寫器等)應注釋哪些方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM