CodeBlanks Logo Icon CodeBlanks

KSP processor

KSP processor yazmayı öğrenirsin.

Bir processor nasıl yazılır?

Bir KSP processor yazmak için SymbolProcessorProvider ile işleyiciyi sunarsın. Sağlayıcı (provider), create(environment) metoduyla processor örneği üretir.

İşleyici process(resolver) içinde annotation'lı sembolleri bulur ve işler. Her sembol için tipik olarak: resolver.getSymbolsWithAnnotation("Entity") çağrılır, sonuç bir liste toplanır, her birinden Kotlin kodu üretilir ve codeGenerator'e yazılır. Bu derste basit bir EntityProcessor yazacaksın; gerçek codegen yerine kabul edilen sembolleri loglayacak.

Sembol filtreleme

Bir processor nadiren tüm sembolleri işler; genellikle belirli bir annotation'a sahip olanları seçer. Buna sembol filtreleme denir.

Örnek: symbols.filter { it.startsWith("Entity") }.forEach { ... }. Burada filter ile yalnızca Entity ile başlayanlar alınır; forEach ile her biri için bir işlem yapılır. Gerçek KSP'de bu filtre getSymbolsWithAnnotation ile yapılır; bu derste basit bir List<String> üzerinde gösteriyoruz. Filtreleme, processor'ın yalnızca ilgili sembollerle uğraşmasını sağlar.

Uygulama EntityProcessor yaz

EntityProcessor sınıfı tanımla. fun process(symbols: List<String>) metodu, symbols listesinde filter { it.startsWith("Entity") } yapsın ve her biri için println("processed: $it") çağrısı yapsın. main içinde listOf("Entity:User", "Plain", "Entity:Order") ile çağır.

Başlangıç kodu

Main.kt
// EntityProcessor sınıfını ekle

fun main() {
    EntityProcessor().process(listOf("Entity:User", "Plain", "Entity:Order"))
}

Örnek çözüm

Main.kt
class EntityProcessor {
    fun process(symbols: List<String>) {
        symbols.filter { it.startsWith("Entity") }.forEach { println("processed: $it") }
    }
}
fun main() {
    EntityProcessor().process(listOf("Entity:User", "Plain", "Entity:Order"))
}

Beklenen çıktı

processed: Entity:User
processed: Entity:Order

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 process metodunu çağır

Soru
fun main() {
    val p = EntityProcessor()
    p.____(listOf("User", "Order"))
}
Cevap
fun main() {
    val p = EntityProcessor()
    p.process(listOf("User", "Order"))
}

Açıklama: processor.process(...) ile semboller işlenir.

2 Processor adımlarını eşle

Kavram Anlamı
getSymbolsWithAnnotation Sembol bulma
filter Sembol süzme
forEach Her birini işleme
codeGenerator Kod yazma

3 Bir processor sembolleri nasıl bulur?

  • Rastgele liste tarayarak
  • HTTP isteği atarak
  • getSymbolsWithAnnotation ile Doğru cevap
  • Reflection ile runtime'da

Açıklama: getSymbolsWithAnnotation ile ilgili semboller derleme zamanında bulunur.

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