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

Antlr 注释生成的Java源代码的可空性(对于Kotlin),antlr,java,annotations,kotlin,Antlr,Java,Annotations,Kotlin,我正在使用源代码生成工具()为我的项目生成Java源文件。然而,我用Kotlin编写了大部分(如果不是全部的话)代码 Kotlin已经提供了,所以使用生成的源代码不是问题。然而,由于Kotlin的作用,我失去了使用Kotlin的大部分空安全性。在最好的情况下,我有平台类型的警告(使类型显式以避免细微的错误);在最坏的情况下,我有意外的崩溃和微妙的错误 然而,Kotlin确实尊重JSR-305、FindBugs、Lombok、Eclipse和JetBrains各自的@Nullable/@NonNu

我正在使用源代码生成工具()为我的项目生成Java源文件。然而,我用Kotlin编写了大部分(如果不是全部的话)代码

Kotlin已经提供了,所以使用生成的源代码不是问题。然而,由于Kotlin的作用,我失去了使用Kotlin的大部分空安全性。在最好的情况下,我有平台类型的警告(使类型显式以避免细微的错误);在最坏的情况下,我有意外的崩溃和微妙的错误

然而,Kotlin确实尊重JSR-305、FindBugs、Lombok、Eclipse和JetBrains各自的
@Nullable
/
@NonNull
,将它们作为适当的非null类型或可选类型引入

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


为了在空安全代码中使用,是否可以/最好的方法是注释生成的java源代码的可空性?

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

如果您不能修改生成器(例如,因为生成器是专有的,您没有其源代码),那么您可以使用字节码工程进行修改。例如,ASM站点上的此页面提供了一种方法:


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

您解决了这个问题吗?对这个精确用例的解决方案感兴趣(antlr+kotlin)