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.

  • Los cambios de Android Studio 3.0 Kotlin no se reflejan en la compilation
  • Dependencia circular cuando se comstack con Kotlin 1.1.2-4, pero no en 1.1.2-3
  • ¿Puedo transformar cadena en expresión de plantilla o expresión lambda en kotlin?
  • La aplicación del complemento Realm en el proyecto Kotlin produce un error de compilation
  • Kotlin con Android DataBinding en Android Studio 3.0 canary 2
  • Falló la inferencia del tipo de Kotlin: no coincide el tipo "matriz encontrada <*?>, Matriz obligatoria <*>?"
  • ¿Cómo selecciono qué sobrecarga de Java sobrescribir en una class derivada de Kotlin?
  • Llame al método varargs de java de kotlin
  • Kotlin: ¿Cómo puedo invocar un campo lambda que tiene un tipo genérico de su class?
  • ¿Debo usar @Repository cuando solo uso JdbcTemplate en mi class DAO?
  • Las dependencies de Bintray no se downloadán en InteliJ