Özet - KSP ve KAPT
- Kotlin kursu
- Uzman
- Ders 12/47
- 5 dk
KSP processor, KAPT ve kod üretimini birleştirerek bir annotation işleyici yazarsın.
Özet - KSP ve KAPT
Bu grupta KSP, processor yazma, KAPT, ikisinin karşılaştırması ve üretilen kodu öğrendin. Şimdi bunları birleştiren bir processor yazacaksın.
Yazacağın EntityProcessor, bir liste sembol alacak; her biri için bir Kotlin sınıf metni üretecek ve logger'a yazacak. Bu, KSP processor + kod üretiminin basitleştirilmiş bir modelidir. Gerçek KSP'de codeGenerator dosyaya yazar; burada logger ile ekrana basıyoruz.
Birleştirme: üretici processor
Şimdi KSP processor iskeletini ve kod üretimini birleştiren bir EntityProcessor yazacağız. Processor, sembolleri alır; her biri için bir Kotlin sınıf metni üretir; logger'a yazar.
Örnek: class EntityProcessor(private val logger: (String) -> Unit). fun process(symbols: List<String>) her sembol için logger("class $it(val id: Int)") çağrısı yapsın. Bu model, KSP'de codeGenerator.createNewFile ile yapılan işin basit bir versiyonudur. Gerçek KSP'de codeGenerator bir OutputStream döner; burada doğrudan logger kullanıyoruz.
Uygulama EntityProcessor + üreteç yaz
class EntityProcessor(private val logger: (String) -> Unit) tanımla. fun process(symbols: List<String>) metodu her sembol için logger("class $it(val id: Int)") çağrısı yapsın. main içinde logger = { msg -> println(msg) } ile bir processor oluştur ve listOf("User", "Order") ile çağır.
Başlangıç kodu
// EntityProcessor sınıfını ekle (logger alsın)
fun main() {
val p = EntityProcessor { msg -> /* msg yazdır */ }
p.process(listOf("User", "Order"))
}Örnek çözüm
class EntityProcessor(private val logger: (String) -> Unit) {
fun process(symbols: List<String>) {
for (it in symbols) logger("class $it(val id: Int)")
}
}
fun main() {
val p = EntityProcessor { msg -> println(msg) }
p.process(listOf("User", "Order"))
}Beklenen çıktı
class User(val id: Int) class Order(val id: Int)
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi adım bir processor'da önce gelir?
- Kod üretme
- Dosya kapatma
- Sembol bulma Doğru cevap
- Derlemeyi bitirme
Açıklama: Önce semboller bulunur, sonra onlar için kod üretilir.
2 logger çağrısını tamamla
fun process(symbols: List<String>) {
for (it in symbols) {
____("class $it(val id: Int)")
}
}
fun process(symbols: List<String>) {
for (it in symbols) {
logger("class $it(val id: Int)")
}
}
Açıklama: logger ile üretilen kod ekrana yazılır.
3 KSP kavramlarını eşle
| Kavram | Anlamı |
|---|---|
SymbolProcessor |
İşleyici arabirimi |
Resolver |
Sembol erişimi |
codeGenerator |
Kod yazma |
KAPT |
Eski yol |