Kotlin可以在类文件中发出JSR-305注释

我正在使用https://github.com/vojtechhabarta/typescript-generator的 Kotlin来为我在API中使用的类生成TypeScript定义。

为了保留可空性信息,typescript-generator可以使用字段和方法中的注释。 它支持构建脚本中列出的任意注释类名称。

由于某种原因,Kotlin使用@org.jetbrains.annotations.Nullable而不是JSR-305注释@javax.annotation.Nullable注释可空字段。

虽然JSR-305注释具有RetentionPolicy.RUNTIME ,但Jetbrains注释具有RetentionPolicy.CLASS ,使其不适合通过使用Java Reflection来检测注释的库进行反省。

是否有可能让Kotlin生成基于标准的注释而不是JetBrains专有的注释?

如果没有,我对处理这个问题的简单解决方案感兴趣。 也许是一个Gradle插件,可以从JetBrains或类似的产生JSR-305注释。 我真的不希望双重注释一切?@Nullable

Kotlin旨在发射自己的(JetBrains)注释。 这个选择是因为JSR 305从未被释放,并且JetBrains没有合法的方式将JSR 305注释与编译器捆绑在一起,因为(休眠)JSR 305上的许可证不允许它。 com.google.code.findbugs:jsr305 maven artifact的合法状态同样很模糊,因为javax包名称空间是专门为JSR预留的。

有以下可能的解决方案:

  1. 编写一个定制的Gradle插件,后者处理Kotlin编译的类文件,并将org.jetbrains.annotations.*注释更改为相应的javax.annotation.*注释(从NotNullNonnullNullableNullable ),并将相应的attiributes从runtime-不可见的注释到运行时可见的注释。

  2. 修补typescript-generator以便除Java反射之外还使用Kotlin反射API从Kotlin类获取非线性信息。 这个任务的入口点是Java Class实例的kotlin扩展,它允许检索所有的Kotlin元数据。

  3. jackson-module-kotlin添加到jackson-module-kotlin typescript-generator 。 这个模块使用Kotlin的反射来获取所有Kotlin的具体信息,并将其提供给Jackson,而typescript-generator使用Jackson bean introspection来获取它的类型信息,所以它可能正常工作。