diff --git a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignAnnotationMatchingService.kt b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignAnnotationMatchingService.kt index 03f0b232566..67f8ea4ac8a 100644 --- a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignAnnotationMatchingService.kt +++ b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignAnnotationMatchingService.kt @@ -43,7 +43,7 @@ internal class FirAssignAnnotationMatchingService( if (this.annotations.any { it.toAnnotationClassId(session)?.asSingleFqName() in annotationClassIds }) return true return resolvedSuperTypeRefs.any { superTypeRef -> val symbol = superTypeRef.type.fullyExpandedType(session).toRegularClassSymbol(session) ?: return@any false - symbol.annotations.any { it.toAnnotationClassId(session)?.asSingleFqName() in annotationClassIds } + symbol.annotated() } } } diff --git a/plugins/assign-plugin/testData/codegen/annotation.kt b/plugins/assign-plugin/testData/codegen/annotation.kt index b6021c2a71f..923a3fe0f34 100644 --- a/plugins/assign-plugin/testData/codegen/annotation.kt +++ b/plugins/assign-plugin/testData/codegen/annotation.kt @@ -45,6 +45,16 @@ data class KotlinStringProperty(private var v: String): KotlinProperty { override fun get() = this.v } +abstract class KotlinAbstractStringProperty: KotlinProperty + +data class KotlinStringProperty2(private var v: String): KotlinAbstractStringProperty() { + override fun assign(v: String) { + this.v = v + } + override fun get() = this.v +} + + @ValueContainer data class KotlinClassStringProperty(private var v: String) { fun assign(v: String) { @@ -91,6 +101,18 @@ fun `should work with annotation on Kotlin interface`(): String { } } +fun `should work with annotation on Kotlin interface via intermediate supertype`(): String { + data class Task(val input: KotlinStringProperty2) + val task = Task(KotlinStringProperty2("Fail")) + task.input = "OK" + + return if (task.input.get() != "OK") { + "Fail: ${task.input.get()}" + } else { + "OK" + } +} + fun `should work with annotation on Kotlin class`(): String { data class Task(val input: KotlinClassStringProperty) val task = Task(KotlinClassStringProperty("Fail"))