İ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:
SymbolProcessorProvidersı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 deferredSı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 StringArtı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
SymbolProcessorveSymbolProcessorProvideruygulayı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çinCodeGeneratorkullanı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
- KSP ve KAPT: KSP Neden Daha Hızlıdır
- İlk SymbolProcessor'ınızı Yazma
- KotlinPoet ile Kotlin Kaynak Dosyaları Oluşturma
- KSP İşlemcilerini Gradle Derlemesine Entegre Etme