首页 文章

注释生成的Java源可空性(对于Kotlin)

提问于
浏览
1

我正在使用源生成工具(antlr)为我的项目生成Java源文件 . 但是,我写的大部分内容,如果不是我的所有代码,都写在Kotlin中 .

Kotlin已经提供great Java interop,因此使用生成的源不是问题 . 但是,由于Kotlin brings Java's nullable types into a null-safe system的原因,我失去了大部分使用Kotlin的null安全性 . 在最好的情况下,我有平台类型的警告(make type明确以避免细微的错误);在最坏的情况下,我有意想不到的崩溃和微妙的错误 .

但是,Kotlin确实尊重nullability annotations,例如JSR-305,FindBugs,Lombok,Eclipse和JetBrains各自的 @Nullable / @NonNull 形式,将这些形式作为适当的非null类型或可选项 .

因为代码是生成的并且我可以访问源代码(并了解它是如何工作的),所以我知道哪些函数可以/不返回 null ,并且希望对它们进行注释,以便它们整齐地包含在我的空安全代码中 . 但是,我无法将注释直接添加到代码中,因为它是在构建步骤中生成的,并且会覆盖任何手动更改 .

Is it possible to / what is the best way to annotate the nullability of generated java sources for the purpose of use in null-safe code?

1 回答

  • 2

    最好的方法是修改源代码生成器,使其包含您需要的注释 .

    如果您无法修改生成器(例如,因为生成器是专有的,并且您没有源代码),那么您可以使用字节码工程来完成此操作 . 例如,ASM站点上的此页面提供了一种方法:

    当然,在任何一种情况下,您都需要一些方法来告诉工具(生成器,字节码重写器,等等)哪些方法应该注释 .

相关问题