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ć
%Tw 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
- KSP a KAPT: dlaczego KSP jest szybsze
- Pisanie pierwszego SymbolProcessor
- Generowanie plików źródłowych Kotlina za pomocą KotlinPoet
- Integracja procesorów KSP z kompilacją Gradle