From f61d201c405971d62269f3e69891da37031360f3 Mon Sep 17 00:00:00 2001 From: Jakob Villumsen Date: Mon, 27 Jul 2026 14:01:17 +0200 Subject: [PATCH 1/2] Move ImplicitElementProcessor to kotlin-analysis-api --- .../com/google/devtools/ksp/processor/ImplicitElementProcessor.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {test-utils/src/main => kotlin-analysis-api/src/test}/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt (100%) diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt similarity index 100% rename from test-utils/src/main/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt rename to kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt From e4e50f54f2bf204ffb904589dbe132141502adb6 Mon Sep 17 00:00:00 2001 From: Jakob Villumsen Date: Mon, 27 Jul 2026 14:02:49 +0200 Subject: [PATCH 2/2] Add support for backing fields in ImplicitElementProcessor --- .../ksp/processor/ImplicitElementProcessor.kt | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt index b4fc479b1b..f24d4f375a 100644 --- a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt +++ b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/ImplicitElementProcessor.kt @@ -38,10 +38,9 @@ class ImplicitElementProcessor : AbstractTestProcessor() { override fun process(resolver: Resolver): List { val ClsClass = resolver.getClassDeclarationByName(resolver.getKSNameFromString("Cls"))!! + val ctorSimpleName = ClsClass.primaryConstructor?.simpleName?.asString() ?: "" result.add( - "${ - ClsClass.primaryConstructor?.simpleName?.asString() ?: "" - }; origin: ${ClsClass.primaryConstructor?.origin}" + "$ctorSimpleName; origin: ${ClsClass.primaryConstructor?.origin}" ) result.add(ClsClass.getConstructors().map { it.toString() }.joinToString(",")) val ITF = resolver.getClassDeclarationByName(resolver.getKSNameFromString("ITF"))!! @@ -51,11 +50,8 @@ class ImplicitElementProcessor : AbstractTestProcessor() { result.add(JavaClass.getDeclaredFunctions().map { it.simpleName.asString() }.joinToString(",")) val readOnly = ClsClass.declarations.single { it.simpleName.asString() == "readOnly" } as KSPropertyDeclaration readOnly.getter?.let { - result.add( - "readOnly.get(): ${it.origin} annotations from property: ${ - it.annotations.map { it.shortName.asString() }.joinToString(",") - }" - ) + val shortNameAnnotations = it.annotations.map { it.shortName.asString() }.joinToString(",") + result.add("readOnly.get(): ${it.origin} annotations from property: $shortNameAnnotations") } readOnly.getter?.receiver?.let { result.add("readOnly.getter.owner: " + nameAndOrigin(it)) } readOnly.setter?.let { result.add("readOnly.set(): ${it.origin}") } @@ -64,13 +60,10 @@ class ImplicitElementProcessor : AbstractTestProcessor() { ClsClass.declarations.single { it.simpleName.asString() == "readWrite" } as KSPropertyDeclaration readWrite.getter?.let { result.add("readWrite.get(): ${it.origin}") } readWrite.setter?.let { - result.add( - "readWrite.set(): ${it.origin} annotations from property: ${ - it.annotations.map { - it.shortName.asString() - }.joinToString(",") - }" - ) + val shortNameAnnotations = it.annotations.map { + it.shortName.asString() + }.joinToString(",") + result.add("readWrite.set(): ${it.origin} annotations from property: $shortNameAnnotations") } val dataClass = resolver.getClassDeclarationByName(resolver.getKSNameFromString("Data"))!! result.add(dataClass.getConstructors().map { it.toString() }.joinToString(",")) @@ -91,11 +84,16 @@ class ImplicitElementProcessor : AbstractTestProcessor() { listOf("Test", "lib.Test").forEach { clsName -> resolver.getClassDeclarationByName(clsName)!!.let { cls -> cls.getDeclaredProperties().single().let { annotated -> - result.add( - "$clsName, $annotated: ${annotated.annotations.toList().map { - "${it.shortName.asString()}: ${ it.useSiteTarget }" - }}" - ) + val shortNameAnnotationsWithTargets = annotated.annotations.toList().map { + "${it.shortName.asString()}: ${it.useSiteTarget}" + } + result.add("$clsName, $annotated: $shortNameAnnotationsWithTargets") + annotated.backingField?.let { field -> + val fieldShortNameAnnotationsWithTargets = field.annotations.toList().map { + "${it.shortName.asString()}: ${it.useSiteTarget}" + } + result.add("$clsName, $field: $fieldShortNameAnnotationsWithTargets") + } } } }