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