我正在使用源生成工具 ( antlr ) 为我的项目生成 Java 源文件。然而,我的大部分(如果不是全部)代码都是用 Kotlin 编写的。
Kotlin 已经提供 great Java interop ,因此使用生成的源不是问题。然而,由于 Kotlin brings Java's nullable types into a null-safe system ,我失去了使用 Kotlin 的大部分空安全性。最好的情况是我有平台类型的警告(使类型明确以避免微妙的错误);在最坏的情况下,我会遇到意想不到的崩溃和微妙的错误。
但是,Kotlin 确实尊重 nullability annotations ,例如 JSR-305、FindBugs、Lombok、Eclipse 和 JetBrains 各自形式的 @Nullable
/@NonNull
,将它们作为适当的非 null 类型或可选类型引入.
因为代码已生成,并且我可以访问源代码(并了解其工作原理),所以我知道哪些函数可以/不返回 null
,并且希望对它们进行注释,以便它们包括整齐地进入我的空安全代码。但是,我无法直接将注释添加到代码中,因为它是在构建步骤期间生成的,并且会覆盖任何手动更改。
为了在空安全代码中使用,是否可以/注释生成的 java 源的可空性的最佳方法是什么?
最佳答案
最好的方法是修改源代码生成器,使其包含您需要的注释。
如果您无法修改生成器(例如,因为生成器是专有的并且您没有其源代码),那么您可以使用字节码工程来完成此操作。例如,ASM 站点上的此页面提供了一种方法:
当然,无论哪种情况,您都需要某种方式来告诉工具(生成器、字节码重写器等)应该注释哪些方法。
关于java - 注释生成的 Java 源可为空性(适用于 Kotlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528843/