CodeBlanks Logo Icon CodeBlanks

Ö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.

Başlangıç kodu

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

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

Soru
fun process(symbols: List<String>) {
    for (it in symbols) {
        ____("class $it(val id: Int)")
    }
}
Cevap
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

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