diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index b833d5a4ab9..3c013bff767 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -74,11 +74,6 @@ open class FirBodyResolveTransformer( private var primaryConstructorParametersScope: FirLocalScope? = null override fun transformConstructor(constructor: FirConstructor, data: Any?): CompositeTransformResult { - if (constructor.isPrimary) { - primaryConstructorParametersScope = FirLocalScope().apply { - constructor.valueParameters.forEach { this.storeDeclaration(it) } - } - } if (implicitTypeOnly) return constructor.compose() return super.transformConstructor(constructor, data) } @@ -131,6 +126,12 @@ open class FirBodyResolveTransformer( scopes.addIfNotNull(symbolProvider.getClassUseSiteMemberScope(companionObject.classId, session, scopeSession)) } val result = withLabelAndReceiverType(regularClass.name, regularClass, type) { + val constructor = regularClass.declarations.firstOrNull() as? FirConstructor + if (constructor?.isPrimary == true) { + primaryConstructorParametersScope = FirLocalScope().apply { + constructor.valueParameters.forEach { this.storeDeclaration(it) } + } + } super.transformRegularClass(regularClass, data) } primaryConstructorParametersScope = oldConstructorScope diff --git a/compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.kt b/compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.kt new file mode 100644 index 00000000000..f49645188e6 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.kt @@ -0,0 +1,3 @@ +class Bar(name: () -> String) { + val name = name() +} \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.txt b/compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.txt new file mode 100644 index 00000000000..ad2414e1afe --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.txt @@ -0,0 +1,10 @@ +FILE: propertyFromParameter.kt + public final class Bar : R|kotlin/Any| { + public constructor(name: R|kotlin/Function0|): R|Bar| { + super() + } + + public final val name: = R|/name|.R|FakeOverride|() + public get(): + + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java index 93ab0fada97..e8875636a93 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java @@ -372,6 +372,11 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase { runTest("compiler/fir/resolve/testData/resolve/expresssions/invoke/implicitTypeOrder.kt"); } + @TestMetadata("propertyFromParameter.kt") + public void testPropertyFromParameter() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/expresssions/invoke/propertyFromParameter.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("compiler/fir/resolve/testData/resolve/expresssions/invoke/simple.kt"); diff --git a/compiler/testData/ir/irText/expressions/multipleThisReferences.fir.txt b/compiler/testData/ir/irText/expressions/multipleThisReferences.fir.txt index 307f2910d2b..8ca48093158 100644 --- a/compiler/testData/ir/irText/expressions/multipleThisReferences.fir.txt +++ b/compiler/testData/ir/irText/expressions/multipleThisReferences.fir.txt @@ -83,7 +83,7 @@ FILE fqName: fileName:/multipleThisReferences.kt FIELD PROPERTY_BACKING_FIELD name:xx type:kotlin.String visibility:public [final] EXPRESSION_BODY CALL 'public final fun plus (other: kotlin.Any?): kotlin.String declared in kotlin' type=kotlin.String origin=null - other: CALL 'public final fun (): kotlin.Int declared in .Host' type=kotlin.Int origin=null + other: GET_VAR 'y: kotlin.Int declared in .Host.' type=kotlin.Int origin=null FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Host.test.) returnType:kotlin.String correspondingProperty: PROPERTY name:xx visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.Host.test.