gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:18:38 26 4
gpt4 key购买 nike

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

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

出于某种原因,Kotlin 使用 @org.jetbrains.annotations.Nullable 而非 JSR-305 注释 @javax.annotation.Nullable 对可空字段进行注释。

虽然 JSR-305 注释具有 RetentionPolicy.RUNTIME,但 Jetbrains 注释具有 RetentionPolicy.CLASS,因此不适合使用 Java 反射检测注释的库进行自省(introspection).

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

如果没有,我对处理该问题的简单解决方案感兴趣。也许是一个 Gradle 插件,可以从 JetBrains 或类似的注释中生成 JSR-305 注释。我真的不想用 ?@Nullable 对所有内容进行双重注释。

最佳答案

Kotlin 旨在发出自己的 (JetBrains) 注释。做出此选择是因为 JSR 305从未发布过,并且 JetBrains 没有合法的方式将 JSR 305 注释与编译器捆绑在一起,因为(休眠的)JSR 305 的许可证不允许这样做。 com.google.code.findbugs:jsr305 maven 工件的法律地位同样不明确,因为 javax 包命名空间是专门为 JSR 保留的。

有以下可能的解决方案:

  1. 编写自定义 Gradle 插件,对 Kotlin 编译的类文件进行后处理,并将 org.jetbrains.annotations.* 注释更改为相应的 javax.annotation.* 注释(NotNullNonnullNullableNullable),并从运行时不可见的注释中更改相应的属性到运行时可见的。

  2. 修补 typescript-generator,使其除了使用 Java 反射外还使用 Kotlin 反射 API 从 Kotlin 类中获取可空性信息。此任务的入口点是 kotlin Java Class 实例的扩展,允许检索所有 Kotlin 元数据。

  3. 添加jackson-module-kotlintypescript-generator。该模块使用 Kotlin 的反射来获取所有 Kotlin 特定信息并将其提供给 Jackson,而 typescript-generator 使用 Jackson bean 自省(introspection)来获取其类型信息,因此它可能会正常工作。

关于types - Kotlin 可以在类文件中发出 JSR-305 注释吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46247445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com