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 4717203f7e1..78269692c1e 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 @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.caches.FirCache import org.jetbrains.kotlin.fir.caches.firCachesFactory import org.jetbrains.kotlin.fir.caches.getValue -import org.jetbrains.kotlin.fir.expressions.classId +import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent.Factory import org.jetbrains.kotlin.fir.resolve.fullyExpandedType @@ -40,10 +40,10 @@ internal class FirAssignAnnotationMatchingService( } private fun FirRegularClassSymbol.annotated(): Boolean { - if (this.annotations.any { it.classId in annotationClassIds }) return true - return resolvedSuperTypeRefs.any { - val symbol = it.type.fullyExpandedType(session).toRegularClassSymbol(session) ?: return@any false - symbol.annotations.any { it.classId in annotationClassIds } + if (this.annotations.any { it.toAnnotationClassId(session) 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) in annotationClassIds } } } } diff --git a/plugins/assign-plugin/testData/codegen/typealias.kt b/plugins/assign-plugin/testData/codegen/typealias.kt new file mode 100644 index 00000000000..446d84381ca --- /dev/null +++ b/plugins/assign-plugin/testData/codegen/typealias.kt @@ -0,0 +1,61 @@ +// FILE: test.kt +annotation class ValueContainer + +typealias VC = ValueContainer + +@VC +interface KotlinProperty { + fun assign(argument: T); + fun get(): T; +} + +data class KotlinStringProperty(private var v: String): KotlinProperty { + override fun assign(v: String) { + this.v = v + } + override fun get() = this.v +} + +@VC +data class KotlinClassStringProperty(private var v: String) { + fun assign(v: String) { + this.v = v + } + fun get(): String { + return v + } +} + +fun `should work with annotation on Kotlin interface`(): String { + data class Task(val input: KotlinStringProperty) + val task = Task(KotlinStringProperty("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")) + task.input = "OK" + + return if (task.input.get() != "OK") { + "Fail: ${task.input.get()}" + } else { + "OK" + } +} + +fun box(): String { + var result = `should work with annotation on Kotlin interface`() + if (result != "OK") return result + + result = `should work with annotation on Kotlin class`() + if (result != "OK") return result + + return "OK" +} diff --git a/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirBlackBoxCodegenTestForAssignmentPluginGenerated.java b/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirBlackBoxCodegenTestForAssignmentPluginGenerated.java index b91907f20f2..bf5eb1e4cae 100644 --- a/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirBlackBoxCodegenTestForAssignmentPluginGenerated.java +++ b/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirBlackBoxCodegenTestForAssignmentPluginGenerated.java @@ -49,6 +49,12 @@ public class FirBlackBoxCodegenTestForAssignmentPluginGenerated extends Abstract runTest("plugins/assign-plugin/testData/codegen/supportedUsage.kt"); } + @Test + @TestMetadata("typealias.kt") + public void testTypealias() throws Exception { + runTest("plugins/assign-plugin/testData/codegen/typealias.kt"); + } + @Test @TestMetadata("varBehaviour.kt") public void testVarBehaviour() throws Exception { diff --git a/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/IrBlackBoxCodegenTestAssignmentPluginGenerated.java b/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/IrBlackBoxCodegenTestAssignmentPluginGenerated.java index 8a5495cdf53..6bca0137b04 100644 --- a/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/IrBlackBoxCodegenTestAssignmentPluginGenerated.java +++ b/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/IrBlackBoxCodegenTestAssignmentPluginGenerated.java @@ -49,6 +49,12 @@ public class IrBlackBoxCodegenTestAssignmentPluginGenerated extends AbstractIrBl runTest("plugins/assign-plugin/testData/codegen/supportedUsage.kt"); } + @Test + @TestMetadata("typealias.kt") + public void testTypealias() throws Exception { + runTest("plugins/assign-plugin/testData/codegen/typealias.kt"); + } + @Test @TestMetadata("varBehaviour.kt") public void testVarBehaviour() throws Exception {