0Pricing
Kotlin Academy · Ders

İlk SymbolProcessor'ınızı Yazma

Ek açıklamalı sınıfları tarayan ve bunları günlüğe kaydeden bir KSP işlemcisi uygulayın.

İlk SymbolProcessor'ınızı Yazma, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Proje Yapısı

Bir KSP işlemcisi ayrı bir Gradle modülünde (örneğin :processor) bulunur. Kullanan modül KSP eklentisini uygular ve işlemci modülüne bir ksp bağımlılığı bildirir. İşlemci modülünün kendisi ise KSP API'sine normal bir implementation bağımlılığına sahiptir.

KSP Bağımlılıklarını Ekleme

İşlemci modülünüzün build.gradle.kts dosyasında:

plugins { kotlin("jvm") }
dependencies {
    implementation("com.google.devtools.ksp:symbol-processing-api:2.0.0-1.0.21")
}

SymbolProcessor Arayüzü

SymbolProcessor uygulayın. Ana giriş noktası process(resolver: Resolver): List işlevdir. İşleyemediğiniz sembolleri (örneğin bağımlılıkları henüz çözümlenmemiş olanları) ikinci tur için döndürün.

import com.google.devtools.ksp.processing.*
import com.google.devtools.ksp.symbol.*

class MyProcessor(private val logger: KSPLogger,
                  private val codeGenerator: CodeGenerator) : SymbolProcessor {
    override fun process(resolver: Resolver): List<KSAnnotated> {
        val symbols = resolver.getSymbolsWithAnnotation("com.example.MyAnnotation")
        // process symbols here
        return emptyList()
    }
}

SymbolProcessorProvider

KSP, işlemcinizi bir SymbolProcessorProvider aracılığıyla keşfeder. Bunu resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider içinde kaydedin:

class MyProcessorProvider : SymbolProcessorProvider {
    override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor =
        MyProcessor(
            logger = environment.logger,
            codeGenerator = environment.codeGenerator
        )
}

Hizmet Kayıt Dosyası

Dosyayı, işlemci modülünüzün kaynaklarında tam olarak belirtilen yolda oluşturun:

  • Yol: src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider
  • İçerik: SymbolProcessorProvider sınıfınızın tam nitelikli adı

Ek Açıklamaya Göre Sembolleri Çözümleme

Ek açıklamanızla işaretlenmiş tüm bildirimleri almak için resolver.getSymbolsWithAnnotation(fqn) kullanın. Sonucu, beklediğiniz bildirim türüne (örneğin sınıf bildirimlerine) göre filtreleyin:

val classes = resolver
    .getSymbolsWithAnnotation("com.example.MyAnnotation")
    .filterIsInstance<KSClassDeclaration>()

Sembolleri Doğrulama

İşlemeden önce her sembolün tamamen çözümlenebilir olduğunu doğrulayın. Tür başvuruları henüz derlenmemiş bir sembol geçerli değildir. Bu tür sembolleri sonraki turda yeniden denemek üzere process() işlevinden döndürün:

val (valid, deferred) = classes.partition { it.validate() }
// process valid; return deferred

Sınıf Bildirimini Ziyaret Etme

Bir sınıfın yapısı içinde dolaşmak için KSVisitorVoid ziyaretçi desenini kullanın. Özelliklere, işlevlere ve iç içe sınıflara erişmek için visitClassDeclaration işlevini geçersiz kılın:

class MyVisitor : KSVisitorVoid() {
    override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
        val name = classDeclaration.simpleName.asString()
        val props = classDeclaration.getAllProperties().toList()
        println("Class: $name, props: ${props.size}")
    }
}

İşlemciden Günlükleme

Çeşitli düzeylerde iletiler göndermek için KSPLogger kullanın. logger.error() derlemeyi başarısız kılar; logger.warn() bir uyarı yazdırır; logger.info(), --info ile görülebilen bilgilendirici bir ileti yazdırır.

logger.info("Processing class: ${classDeclaration.simpleName.asString()}")
logger.error("Missing required annotation", classDeclaration)

Semboldeki Ek Açıklamalara Erişme

Her KSDeclaration, bir annotations dizisine sahiptir. Ek açıklama değerlerini okumak için filter ve arguments kullanın:

val ann = classDeclaration.annotations
    .first { it.shortName.asString() == "MyAnnotation" }
val value = ann.arguments.first { it.name?.asString() == "value" }.value as String

Artımlı İşleme İpuçları

Hangi çıktı dosyalarının hangi girdi sembollerine bağlı olduğunu CodeGenerator.createNewFile(dependencies = ...) aracılığıyla ilişkilendirerek KSP'ye bildirin. Böylece girdilerinin hiçbiri değişmediğinde KSP işlemcinizi atlayabilir.

Kısa Kontrol

KSP, SymbolProcessorProvider uygulamanızı nasıl keşfeder?

İlk SymbolProcessor'ınızı Yazma

Önemli çıkarımlar:

  • Ayrı bir modülde SymbolProcessor ve SymbolProcessorProvider uygulayın
  • Sağlayıcıyı META-INF/services/ aracılığıyla kaydedin
  • Ek açıklama uygulanmış sembolleri bulmak için resolver.getSymbolsWithAnnotation() kullanın
  • İşlemeden önce sembolleri doğrulayın; çözümlenmemiş olanları yeniden denemek üzere döndürün
  • Derleme zamanı iletileri için KSPLogger, dosya yazmak için CodeGenerator kullanın

Sıkça Sorulan Sorular

“İlk SymbolProcessor'ınızı Yazma” dersi ücretsiz mi?

Evet — “İlk SymbolProcessor'ınızı Yazma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“İlk SymbolProcessor'ınızı Yazma” dersinde ne öğreneceğim?

Ek açıklamalı sınıfları tarayan ve bunları günlüğe kaydeden bir KSP işlemcisi uygulayın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“İlk SymbolProcessor'ınızı Yazma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. KSP ve KAPT: KSP Neden Daha Hızlıdır
  2. İlk SymbolProcessor'ınızı Yazma
  3. KotlinPoet ile Kotlin Kaynak Dosyaları Oluşturma
  4. KSP İşlemcilerini Gradle Derlemesine Entegre Etme
← Kotlin Academy Sayfasına Dön