Anotación de la invalidation de fuente Java generada (para Kotlin)

Estoy generando files fuente Java para mi proyecto usando una herramienta de generación de fonts ( antlr ). Sin embargo, estoy escribiendo la mayoría, si no todo mi código, en Kotlin.

Kotlin ya ofrece una gran interoperabilidad de Java , por lo que usar las fonts generadas no es un problema. Sin embargo, debido a cómo Kotlin lleva los types anulables de Java a un sistema nulo , pierdo la mayor parte de la security nula que uso Kotlin. En el mejor de los casos, tengo advertencias sobre types de plataforms (haga que el tipo sea explícito para evitar errores sutiles); en el peor, tengo lockings inesperados y errores sutiles.

Sin embargo, Kotlin respeta las annotations de anulabilidad, como JSR-305, FindBugs, Lombok, Eclipse y las respectivas forms de @Nullable / @NonNull , que las @NonNull como tipo apropiado no nulo u opcional.

Debido a que el código se genera y tengo acceso a la fuente (y entiendo cómo funciona), sé qué funciones pueden / no devolver null , y quiero anotarlas como tales para que se incluyan perfectamente en mi código de security nula. Sin embargo, no puedo agregar annotations directamente en el código, ya que se genera durante el paso de compilation y sobrescribiría cualquier cambio manual.

¿Es posible / cuál es la mejor manera de anotar la nulabilidad de las fonts java generadas con el fin de utilizarlas en un código nulo?

La mejor manera sería modificar el generador de código fuente para que incluya las annotations que requiera.

Si no puede modificar el generador (por ejemplo, porque el generador es propietario y no tiene su código fuente), puede hacerlo utilizando la ingeniería de bytecode. Por ejemplo, esta página en el sitio de ASM ofrece una forma de hacerlo:

Por supuesto, en cualquier caso necesita alguna forma de decirle a la herramienta (el generador, el reescritor de bytecode, lo que sea) qué methods deben ser anotados.

  • Firebase Firestre toObject () con Kotlin
  • diversión en línea pública String.toInt (): Int definido en kotlin.text
  • Android: ¿cómo lograr setOnClickListener en Kotlin?
  • ¿Por qué la aplicación no funciona con Android 4.x en Kotlin?
  • Mapa Mutable no anulable
  • Spring Injecting util: map en Kotlin con tipo de security
  • Realm & Kotlin: DefaultRealmModuleMediator.java -> error: statement inalcanzable
  • ¿Cómo agregar extensión de operador como parte del context de la class específica sin subclasss?
  • jvm comparando String con StringBuffer.reverse () siempre falla
  • test de unidad LogstashEncoder está configurado correctamente
  • IllegalStateException: la actividad se ha destruido (nivel de API <21)