¿Puede Kotlin emitir annotations JSR-305 en files de class

Estoy usando Kotlin con https://github.com/vojtechhabarta/typescript-generator para generar definiciones de TypeScript para mis classs que se usan en una API.

Para preservar la información de nulabilidad, typescript-generator puede usar annotations presentes en campos y methods. Admite nombres de class de anotación arbitrarios, enumerados en el script de compilation.

Kotlin, por alguna razón, anota los campos que @org.jetbrains.annotations.Nullable NULL con @org.jetbrains.annotations.Nullable lugar de la anotación JSR-305, @javax.annotation.Nullable .

Si bien la anotación JSR-305 tiene RetentionPolicy.RUNTIME , la anotación de Jetbrains tiene RetentionPolicy.CLASS , por lo que no es adecuada para la introspección de las bibliotecas que usan Java Reflection para detectar annotations.

¿Es posible hacer que Kotlin genere annotations basadas en estándares en lugar de las annotations propietarias de JetBrains?

Si no, estoy interesado en soluciones simples para manejar el problema. Tal vez un plugin de Gradle que pueda generar annotations JSR-305 de las de JetBrains o similares. Preferiría no tener que hacer doble anotación con un ? y @Nullable .

Solutions Collecting From Web of "¿Puede Kotlin emitir annotations JSR-305 en files de class"

Kotlin está diseñado para emitir sus propias annotations (JetBrains). Esta elección se realizó porque JSR 305 nunca se lanzó y no hay forma legal para que JetBrains agrupe las annotations JSR 305 con el comstackdor, ya que la licencia en (inactiva) JSR 305 no lo permite. El estado legal del artefacto com.google.code.findbugs:jsr305 es igualmente turbio, ya que el espacio de nombres del package javax está específicamente reservado para los JSR.

Existen las siguientes soluciones posibles:

  1. Escriba un plugin personalizado de Gradle que procese los files de class comstackdos por Kotlin y modifique org.jetbrains.annotations.* Anotaciones en las annotations javax.annotation.* NotNull ( NotNull to Nonnull y Nullable to Nullable ) y cambie los attributes correspondientes de runtime- annotations invisibles para los visibles en time de ejecución.

  2. Patch typescript-generator para que utilizara las API de reflexión de Kotlin además de Java Reflection para get información de nullablitity de las classs de Kotlin. El punto de input para esta tarea es la extensión kotlin de la instancia de la Class Java que permite recuperar todos los metadatos de Kotlin.

  3. Agregue jackson-module-kotlin al typescript-generator . Este module está utilizando el reflection de Kotlin para get toda la información específica de Kotlin y alimentarla a Jackson, mientras que typescript-generator utiliza la introspección de bean Jackson para get su tipo de información, por lo que podría funcionar.