0Pricing
Kotlin Academy · Lekcja

Generowanie plików źródłowych Kotlina za pomocą KotlinPoet

Użyj KotlinPoet wewnątrz procesora KSP do generowania bezpiecznego typowo kodu Kotlina.

Generowanie plików źródłowych Kotlina za pomocą KotlinPoet to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Czym jest KotlinPoet

KotlinPoet to API Kotlin firmy Square służące do programistycznego generowania plików źródłowych .kt. Tworzy dobrze sformatowany, idiomatyczny kod Kotlin i naturalnie integruje się z CodeGenerator KSP.

Dodawanie zależności

Należy dodać KotlinPoet do modułu procesora:

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

FileSpec: podstawa wygenerowanego pliku

FileSpec.builder(packageName, fileName) to punkt wejścia. Należy dodać do niego typy, funkcje i właściwości, a następnie zapisać wynik za pomocą CodeGenerator KSP:

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

TypeSpec: definiowanie klasy

Należy użyć TypeSpec.classBuilder() dla klas, objectBuilder() dla obiektów i interfaceBuilder() dla interfejsów. Wywołania buildera można łączyć łańcuchowo, aby dodawać funkcje, właściwości i interfejsy nadrzędne:

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

FunSpec: generowanie funkcji

FunSpec.builder(name) tworzy funkcję. Należy użyć addParameter(), returns() i addStatement(), aby zbudować jej sygnaturę i treść:

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

PropertySpec: generowanie właściwości

Należy użyć PropertySpec.builder(name, type), aby wygenerować właściwości. Można określić KModifier.PRIVATE, KModifier.OVERRIDE albo użyć mutable() dla var:

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

Specyfikatory formatu kodu

KotlinPoet używa specyfikatorów formatu w addStatement() i initializer():

  • %L — literał (bez cudzysłowów)
  • %S — literał tekstowy (z cudzysłowami)
  • %T — nazwa typu (automatycznie obsługuje importy)
  • %N — nazwa (specyfikacji lub ciągu znaków)

Automatyczne importy za pomocą %T

Podczas używania %T z obiektem ClassName KotlinPoet automatycznie dodaje wymagany import. Nie trzeba ręcznie zapisywać instrukcji importu:

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

Zapisywanie do CodeGenerator KSP

Należy użyć mostu kotlinpoet-ksp, aby zapisać wygenerowany FileSpec za pośrednictwem CodeGenerator KSP, zachowując metadane kompilacji przyrostowej:

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

Generowanie funkcji rozszerzających

Należy użyć FunSpec.builder(name).receiver(type), aby wygenerować funkcje rozszerzające:

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

Praktyczny przypadek użycia: generator fabryk

Procesor KSP opatruje klasy danych adnotacją @AutoFactory i używa KotlinPoet do wygenerowania obiektu fabryki towarzyszącej dla każdej z nich. Wygenerowany plik jest umieszczany w tym samym pakiecie co oryginalna klasa.

Testowanie wygenerowanego kodu

W testach jednostkowych należy użyć FileSpec.toString() z KotlinPoet, aby sprawdzać wygenerowany tekst źródłowy bez zapisywania go na dysku. Biblioteka kotlin-compile-testing-ksp może kompilować i uruchamiać wygenerowany kod w testach.

Szybkie sprawdzenie

Który specyfikator formatu w KotlinPoet automatycznie dodaje wymagany import dla wskazywanej klasy?

Podsumowanie: Generowanie plików źródłowych Kotlin za pomocą KotlinPoet

Najważniejsze informacje:

  • FileSpec → plik najwyższego poziomu; TypeSpec → klasa/obiekt/interfejs; FunSpec → funkcja; PropertySpec → właściwość
  • Należy używać %T w odwołaniach do typów — importy są dodawane automatycznie
  • W procesorach KSP pliki należy zapisywać za pomocą file.writeTo(codeGenerator)
  • Do testów jednostkowych wygenerowanego wyniku należy używać FileSpec.toString()

Często zadawane pytania

Czy lekcja „Generowanie plików źródłowych Kotlina za pomocą KotlinPoet” jest bezpłatna?

Tak — pełny tekst „Generowanie plików źródłowych Kotlina za pomocą KotlinPoet” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Generowanie plików źródłowych Kotlina za pomocą KotlinPoet”?

Użyj KotlinPoet wewnątrz procesora KSP do generowania bezpiecznego typowo kodu Kotlina. Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Generowanie plików źródłowych Kotlina za pomocą KotlinPoet”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. KSP a KAPT: dlaczego KSP jest szybsze
  2. Pisanie pierwszego SymbolProcessor
  3. Generowanie plików źródłowych Kotlina za pomocą KotlinPoet
  4. Integracja procesorów KSP z kompilacją Gradle
← Powrót do Kotlin Academy