Ho un processore di annotazione java che genera un sacco di file java durante la compilazione. Mi piacerebbe rendere le classi generate più piacevoli da usare in kotlin aggiungendo metodi di estensione. Mi è stato detto nei forum di Kotlin che qualcosa che potrei provare sarebbe scrivere un file kotlin che contiene le mie funzioni di estensione. Ho provato questo, ho usato l'oggetto Filer
per creare questo file in uscita nella directory StandardLocations.SOURCE_OUTPUT. Intellij può vedere la mia classe generata, e posso usare le funzioni di estensione come previsto, ma l'app non verrà compilata perché il compilatore non riesce a trovare il nuovo file kotlin. C'è un modo per scrivere un nuovo file kotlin che verrà preso dal compilatore kotlin?Come generare un file kotlin da un processore di annotazioni?
19
A
risposta
2
Per kapt è possibile ottenere la cartella di origine tramite.
Map<String, String> options = processingEnv.getOptions();
String generatedPath = options.get("kapt.kotlin.generated");
String path = generatedPath
.replaceAll("(.*)tmp(/kapt/debug/)kotlinGenerated",
"$1generated/source$2");
Purtroppo non funziona per kapt2 (vedi problema KT-14070)
È inoltre possibile creare file .kt tramite scrittore risorsa
Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt")
Ma per ora è necessario richiamare il compilatore due volte perché l'attività compileDebugKotlin viene eseguita prima di richiamare il processore di annotazione javax mediante l'attività compileDebugJavaWithJavac)
0
Emettere i file (con il pacchetto appropriato e nomi) in una directory come src/build/generated-src/kotlin/your/package/File.kt
e aggiungere questo alla tua build.gradle
:
sourceSets {
main.java.srcDirs += 'build/generated-src/kotlin'
}
Esattamente come si compila la vostra applicazione? – yole
Utilizzo del plugin grader di kotlin-android. Scusa, questo è un dettaglio abbastanza importante. –
Puoi pubblicare un progetto di esempio che mostri il problema? – miensol