From d03039b9491d424d52ca904691660348c2912376 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 14 Sep 2023 11:58:05 +0300 Subject: [PATCH] [FIR] Don't generate property fields when context receivers are present ^KT-59874 --- .../transformers/body/resolve/BodyResolveContext.kt | 3 ++- .../thisWithReceiverLabelsProperties.fir.kt | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt index 4fd423a64e5..8b9c696e865 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt @@ -834,7 +834,8 @@ class BodyResolveContext( val receiverTypeRef = property.receiverParameter?.typeRef addLocalScope(FirLocalScope(holder.session)) if (!forContracts && receiverTypeRef == null && property.returnTypeRef !is FirImplicitTypeRef && - !property.isLocal && property.delegate == null + !property.isLocal && property.delegate == null && + property.contextReceivers.isEmpty() ) { storeBackingField(property, holder.session) } diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.fir.kt index d8d5209027a..ac558de8c89 100644 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.fir.kt +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/thisWithReceiverLabelsProperties.fir.kt @@ -4,7 +4,7 @@ class A(val a: T) class B(val b: Any) class C(val c: Any) -context(A, B) var p: Int +context(A, B) var p: Int get() { this@A.a.length this@B.b @@ -15,10 +15,10 @@ class C(val c: Any) this@A.a.length this@B.b this - field = value + field = value } -context(A, A, B) var p: Int +context(A, A, B) var p: Int get() { this@A.a.toDouble() this@A.a.length @@ -30,7 +30,7 @@ class C(val c: Any) this@A.a.length this@B.b this - field = value + field = value } context(A, A, B) val C.p: Int