CodeBlanks Logo Icon CodeBlanks

KSP

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

Main.kt
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

Main.kt
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

Soru
class HelloProcessor : SymbolProcessor {
    override fun ____(resolver: Resolver): List<KSAnnotated> {
        return emptyList()
    }
}
Cevap
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

Uzman bölümündeki tüm dersler