繁体   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