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 78269692c1e..03f0b232566 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 @@ -15,16 +15,16 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent.Factory import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.toRegularClassSymbol -import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName internal class FirAssignAnnotationMatchingService( session: FirSession, - private val annotationClassIds: List + private val annotationClassIds: List ) : FirExtensionSessionComponent(session) { companion object { fun getFactory(annotations: List): Factory { - return Factory { session -> FirAssignAnnotationMatchingService(session, annotations.map { ClassId.fromString(it) }) } + return Factory { session -> FirAssignAnnotationMatchingService(session, annotations.map { FqName(it) }) } } } @@ -40,10 +40,10 @@ internal class FirAssignAnnotationMatchingService( } private fun FirRegularClassSymbol.annotated(): Boolean { - if (this.annotations.any { it.toAnnotationClassId(session) in annotationClassIds }) return true + 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) in annotationClassIds } + symbol.annotations.any { it.toAnnotationClassId(session)?.asSingleFqName() in annotationClassIds } } } } diff --git a/plugins/assign-plugin/test/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginTests.kt b/plugins/assign-plugin/test/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginTests.kt index 5a3b4494429..d2ba075de19 100644 --- a/plugins/assign-plugin/test/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginTests.kt +++ b/plugins/assign-plugin/test/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginTests.kt @@ -72,7 +72,10 @@ fun TestConfigurationBuilder.configureDiagnostics() { class AssignmentPluginEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { companion object { - private val TEST_ANNOTATIONS = listOf("ValueContainer") + private val TEST_ANNOTATIONS = listOf( + "ValueContainer", + "qualified.ValueContainer", + ) } @OptIn(InternalNonStableExtensionPoints::class) diff --git a/plugins/assign-plugin/testData/codegen/qualifiedAnnotation.kt b/plugins/assign-plugin/testData/codegen/qualifiedAnnotation.kt new file mode 100644 index 00000000000..9ad6caaef26 --- /dev/null +++ b/plugins/assign-plugin/testData/codegen/qualifiedAnnotation.kt @@ -0,0 +1,22 @@ +// FILE: annotation.kt +package qualified + +annotation class ValueContainer + +// FILE: main.kt +import qualified.ValueContainer + +@ValueContainer +class StringProperty(var v: String) { + fun assign(v: String) { + this.v = v + } +} + +val property = StringProperty("Initial") + +fun box(): String { + property = "OK" + + return property.v +} diff --git a/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirLightTreeBlackBoxCodegenTestForAssignmentPluginGenerated.java b/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirLightTreeBlackBoxCodegenTestForAssignmentPluginGenerated.java index 33d5740f05f..50b9312ff7d 100644 --- a/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirLightTreeBlackBoxCodegenTestForAssignmentPluginGenerated.java +++ b/plugins/assign-plugin/tests-gen/org/jetbrains/kotlin/assignment/plugin/FirLightTreeBlackBoxCodegenTestForAssignmentPluginGenerated.java @@ -43,6 +43,12 @@ public class FirLightTreeBlackBoxCodegenTestForAssignmentPluginGenerated extends runTest("plugins/assign-plugin/testData/codegen/plusAssignPrecedence.kt"); } + @Test + @TestMetadata("qualifiedAnnotation.kt") + public void testQualifiedAnnotation() throws Exception { + runTest("plugins/assign-plugin/testData/codegen/qualifiedAnnotation.kt"); + } + @Test @TestMetadata("supportedUsage.kt") public void testSupportedUsage() 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 6bca0137b04..942c580e49d 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 @@ -43,6 +43,12 @@ public class IrBlackBoxCodegenTestAssignmentPluginGenerated extends AbstractIrBl runTest("plugins/assign-plugin/testData/codegen/plusAssignPrecedence.kt"); } + @Test + @TestMetadata("qualifiedAnnotation.kt") + public void testQualifiedAnnotation() throws Exception { + runTest("plugins/assign-plugin/testData/codegen/qualifiedAnnotation.kt"); + } + @Test @TestMetadata("supportedUsage.kt") public void testSupportedUsage() throws Exception {