plug - ¿Cómo generar un archivo kotlin desde un procesador de anotaciones?
for kotlin (2)
Envíe sus archivos (con los nombres de paquetes adecuados) a un directorio como src/build/generated-src/kotlin/your/package/File.kt
y agrega esto a tu build.gradle
:
sourceSets {
main.java.srcDirs += ''build/generated-src/kotlin''
}
Tengo un procesador de anotación java que genera un montón de archivos java durante la compilación. Me gustaría hacer que las clases generadas sean más fáciles de usar en kotlin agregando métodos de extensión. Me han dicho en los foros de kotlin que algo que podría intentar sería escribir un archivo kotlin que contenga mis funciones de extensión. He intentado esto, utilicé el objeto de archivador para crear este archivo y enviarlo al directorio StandardLocations.SOURCE_OUTPUT. Intellij puede ver mi clase generada, y puedo usar las funciones de extensión como se esperaba, pero la aplicación no se compilará porque el compilador no puede encontrar el nuevo archivo kotlin. ¿Hay alguna manera de que pueda escribir un nuevo archivo kotlin que pueda ser recogido por el compilador de kotlin?
Para kapt puede obtener la carpeta de origen a través de.
Map<String, String> options = processingEnv.getOptions();
String generatedPath = options.get("kapt.kotlin.generated");
String path = generatedPath
.replaceAll("(.*)tmp(/kapt/debug/)kotlinGenerated",
"$1generated/source$2");
Desafortunadamente no funciona para kapt2 (vea el problema KT-14070 )
También puedes crear archivos .kt a través de un escritor de recursos
Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt")
Pero por ahora necesita invocar el compilador dos veces porque la tarea compileDebugKotlin se ejecuta antes de invocar el procesador de anotación javax mediante la tarea compileDebugJavaWithJavac)