Procesador de anotación Java – Pruebas unitarias de class Kotlin anotadas

Tengo una biblioteca de procesadores de annotations que me gustaría trabajar para Kotlin; sin embargo, me he encontrado con un problema en cuanto a las testings de mi unidad. Realmente apreciaría si alguien pudiera darme un consejo.

Mi implementación actual de testings unitarias usa la biblioteca de testings de compilation de Google. Creo classs de input y salida y las almacena en el directory de resources. Luego, durante la testing unitaria, la biblioteca de compilation comstack la class java de input, ejecuta el procesador de anotación y luego compara las classs generadas con la class de salida esperada del directory de resources.

Aquí hay un ejemplo (de mi proyecto) de a lo que me refiero: resources de la class de testing unitaria (classs de input y salida esperada)

Esto funciona muy bien para todas mis testings unitarias actuales basadas en Java. Sin embargo, cuando bash escribir algunas testings usando las classs de Kotlin, mi testing falla al cargar la class.

Creo que esto se debe a que la biblioteca de testings de compilation es ante todo una biblioteca específica de Java (no veo ninguna mención de Kotlin en su proyecto)

En este momento recibo el siguiente problema:

java.lang.IllegalArgumentException: Comstacktion unit is not of SOURCE kind: "/C:/dev/gsonpath/gsonpath-compiler/build/resources/test/adapter/auto/field_types/primitives/valid/TestValidPrimitives.kt" at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:137) at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:107) at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:64) at com.google.testing.compile.Comstacktion.compile(Comstacktion.java:69) at com.google.testing.compile.JavaSourcesSubject$ComstacktionClause.compilesWithoutError(JavaSourcesSubject.java:281) 

El problema es bastante obvio que se está utilizando el comstackdor incorrecto. La propia exception se produce cuando mi extensión de file no es '.java'. Si bash cargar una class Kotlin con la extensión de file '.java', no funciona, ya que no es la syntax correcta de Java.

¿Alguien ha encontrado este problema antes y lo ha resuelto? He echado un vistazo a algunos otros procesadores de anotación (como DBFlow ), y no escriben testings unitarias de esta manera.

Dado que Kotlin solo recientemente incursionó en el procesamiento de annotations, ¿acaso soy el primero en tener este problema?

Kotlin se integra con los procesadores de anotación de Java ordinarios al generar "stubs" (canales de class vacías, que tienen la misma semántica / methods / campos que las classs de destino de Kotlin) [1] . Esto significa que los procesadores de anotación Java de testing kapt con kapt son esencialmente imposibles, incluso si integra de alguna manera las herramientas de Kotlin en su flujo de testing, terminará probando el propio kapt , en lugar de su propio código.

Si desea asegurarse de que su código de procesamiento de anotación funciona con los resguardos generados por Kotlin, solo genere todas las invariantes posibles que pueda producir el generador de stub y utilícelas como sujetos de testing, como cualquier código Java común.