Kotlin
Özet - KSP ve KAPT
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.
Örnek çözümü göster
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"))
}
Kendini test et
-
Hangi adım bir processor'da önce gelir?
- Kod üretme
- Dosya kapatma
- Sembol bulma
- Derlemeyi bitirme
Cevabı göster
Sembol bulma — Önce semboller bulunur, sonra onlar için kod üretilir.
-
logger çağrısını tamamla
fun process(symbols: List<String>) {
for (it in symbols) {
____("class $it(val id: Int)")
}
}
Cevabı göster
fun process(symbols: List<String>) {
for (it in symbols) {
logger("class $it(val id: Int)")
}
}
-
KSP kavramlarını eşle
- SymbolProcessor
- İşleyici arabirimi
- Resolver
- Sembol erişimi
- codeGenerator
- Kod yazma
- KAPT
- Eski yol
Sıradaki ders: Compiler plugin