0Pricing
Kotlin Academy · Lezione

Generare file sorgente Kotlin con KotlinPoet

Utilizzi KotlinPoet all'interno di un processore KSP per generare codice Kotlin type-safe.

Generare file sorgente Kotlin con KotlinPoet è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Che cos'è KotlinPoet?

KotlinPoet è l'API Kotlin di Square per generare programmaticamente file sorgente .kt. Produce codice Kotlin ben formattato e idiomatico e si integra naturalmente con CodeGenerator di KSP.

Aggiunta della dipendenza

Aggiunga KotlinPoet al modulo del processore:

dependencies {
    implementation("com.squareup:kotlinpoet:1.17.0")
    implementation("com.squareup:kotlinpoet-ksp:1.17.0") // KSP extensions
}

FileSpec: la radice di un file generato

FileSpec.builder(packageName, fileName) è il punto di ingresso. Vi aggiunga tipi, funzioni e proprietà, quindi scriva il risultato tramite CodeGenerator di KSP:

val file = FileSpec.builder("com.example.generated", "MyFactory")
    .addType( /* TypeSpec here */ )
    .build()

TypeSpec: definizione di una classe

Utilizzi TypeSpec.classBuilder() per le classi, objectBuilder() per gli oggetti e interfaceBuilder() per le interfacce. Concatenando le chiamate al builder può aggiungere funzioni, proprietà e superinterfacce:

val classSpec = TypeSpec.classBuilder("MyFactory")
    .addModifiers(KModifier.PUBLIC)
    .addFunction( /* FunSpec */ )
    .build()

FunSpec: generazione di una funzione

FunSpec.builder(name) crea una funzione. Utilizzi addParameter(), returns() e addStatement() per costruirne la firma e il corpo:

val funSpec = FunSpec.builder("create")
    .addParameter("name", String::class)
    .returns(String::class)
    .addStatement("return "Hello, %L!", name")
    .build()

PropertySpec: generazione di una proprietà

Utilizzi PropertySpec.builder(name, type) per generare proprietà. Specifichi KModifier.PRIVATE, KModifier.OVERRIDE oppure utilizzi mutable() per generare un var:

val propSpec = PropertySpec.builder("tag", String::class)
    .initializer("%S", "MyClass")
    .addModifiers(KModifier.PRIVATE)
    .build()

Specificatori di formato del codice

KotlinPoet utilizza specificatori di formato in addStatement() e initializer():

  • %L — valore letterale (senza virgolette)
  • %S — stringa letterale (tra virgolette)
  • %T — nome del tipo (gestisce automaticamente gli import)
  • %N — nome (di una spec o di una stringa)

Import automatici con %T

Quando utilizza %T con un ClassName, KotlinPoet aggiunge automaticamente l'import necessario. Non deve mai scrivere manualmente le istruzioni di import:

val listType = ClassName("kotlin.collections", "List")
val funSpec = FunSpec.builder("items")
    .returns(listType.parameterizedBy(String::class.asTypeName()))
    .addStatement("return emptyList()")
    .build()

Scrittura nel CodeGenerator di KSP

Utilizzi il bridge kotlinpoet-ksp per scrivere il FileSpec generato tramite CodeGenerator di KSP, preservando i metadati della build incrementale:

file.writeTo(
    codeGenerator = codeGenerator,
    aggregating = false
)

Generazione di funzioni di estensione

Utilizzi FunSpec.builder(name).receiver(type) per generare funzioni di estensione:

val extFun = FunSpec.builder("toJson")
    .receiver(ClassName("com.example", "User"))
    .returns(String::class)
    .addStatement("return Gson().toJson(this)")
    .build()

Caso d'uso pratico: generatore di factory

Un processore KSP annota le data class con @AutoFactory e utilizza KotlinPoet per generare un oggetto companion-factory per ciascuna di esse. Il file generato viene inserito nello stesso package della classe originale.

Test del codice generato

Utilizzi FileSpec.toString() di KotlinPoet nei test unitari per verificare il testo sorgente generato senza scriverlo su disco. La libreria kotlin-compile-testing-ksp può compilare ed eseguire il codice generato nei test.

Verifica rapida

In KotlinPoet, quale specificatore di formato aggiunge automaticamente l'import necessario per una classe referenziata?

Riepilogo: generazione di file sorgente Kotlin con KotlinPoet

Punti chiave:

  • FileSpec → file di primo livello; TypeSpec → classe/oggetto/interfaccia; FunSpec → funzione; PropertySpec → proprietà
  • Utilizzi %T per i riferimenti ai tipi: gli import vengono aggiunti automaticamente
  • Scriva il file tramite file.writeTo(codeGenerator) nei processori KSP
  • Utilizzi FileSpec.toString() per i test unitari dell'output generato

Domande Frequenti

La lezione «Generare file sorgente Kotlin con KotlinPoet» è gratuita?

Sì — il testo completo di «Generare file sorgente Kotlin con KotlinPoet» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «Generare file sorgente Kotlin con KotlinPoet»?

Utilizzi KotlinPoet all'interno di un processore KSP per generare codice Kotlin type-safe. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Generare file sorgente Kotlin con KotlinPoet»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. KSP e KAPT: perché KSP è più veloce
  2. Scrivere il primo SymbolProcessor
  3. Generare file sorgente Kotlin con KotlinPoet
  4. Integrare i processori KSP in una build Gradle
← Torna a Kotlin Academy