KSP
- Kotlin kursu
- Uzman
- Ders 7/47
- 5 dk
Kotlin Symbol Processing (KSP) kavramını öğrenirsin.
KSP nedir?
KSP (Kotlin Symbol Processing), Kotlin derleyicisinin eklenti mekanizmasıdır; kaynak kodu okuyarak sembol işleyiciler (symbol processor) çalıştırır. Kotlin 1.6+'da kararlıdır.
Bir KSP modülü SymbolProcessor arabirimini uygular. Her processor process(resolver) metodu ile çağrılır; resolver üzerinden annotated sembolleri bulur. KSP, KAPT'den 2 kata kadar hızlıdır; Kotlin'i Java'ya dönüştürmek zorunda kalmaz. Room, Moshi ve Hilt KSP desteği sunar. Bu derste temel processor iskeletini kuracaksın.
process(resolver) metodu
Bir KSP işleyici, process(resolver: Resolver) metodu ile çağrılır. Burada resolver üzerinden sembollere erişilir.
İşleyici, ilgilendiği annotation'lara sahip sembolleri resolver.getSymbolsWithAnnotation(...) ile bulur. Dönen Sequence<KSAnnotated> üzerinde dolaşıp her birini işler. İşlem bitince işlenemeyen sembolleri geri döndürmek yaygındır; böylece sonraki tür tekrar deneyebilir. İşleyici ayrıca SymbolProcessorEnvironment alır; logger ve seçenekler buralardan gelir. Bu yapı, derleme zamanı kod üretimi için kurulur.
Uygulama HelloProcessor yaz
SymbolProcessorEnvironment(logger: (String) -> Unit) alan bir veri sınıfı tanımla. HelloProcessor(private val env: SymbolProcessorEnvironment) sınıfı içinde fun process() metodu env.logger("KSP hazır") çağrısı yapsın. main içinde println ile logger kur ve processor'ı çağır.
Başlangıç kodu
class SymbolProcessorEnvironment(val logger: (String) -> Unit)
// HelloProcessor sınıfını ekle
fun main() {
val env = SymbolProcessorEnvironment { msg -> /* msg yazdır */ }
// processor'ı çağır
}Örnek çözüm
class HelloProcessor(private val env: SymbolProcessorEnvironment) {
fun process() {
env.logger("KSP hazır")
}
}
fun main() {
val env = SymbolProcessorEnvironment { msg -> println(msg) }
HelloProcessor(env).process()
}Beklenen çıktı
KSP hazır
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 KSP'nin temel arabirimi hangisidir?
- CoroutineScope
- SymbolProcessor Doğru cevap
- FlowCollector
- KoinModule
Açıklama: SymbolProcessor, her KSP işleyicinin uyguladığı arabirimdir.
2 process metodunu tamamla
class HelloProcessor : SymbolProcessor {
override fun ____(resolver: Resolver): List<KSAnnotated> {
return emptyList()
}
}
class HelloProcessor : SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
return emptyList()
}
}
Açıklama: process(resolver) metodu her KSP işleyicide bulunur.
3 KSP parçalarını eşle
| Kavram | Anlamı |
|---|---|
SymbolProcessor |
İşleyici arabirimi |
Resolver |
Sembol erişimi |
SymbolProcessorEnvironment |
Logger ve seçenekler |
KSAnnotated |
Annotated sembol |