diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 9a86e742754..f0266aad0c5 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -528,6 +528,7 @@ class DeclarationsConverter( ) //parse primary constructor val primaryConstructorWrapper = convertPrimaryConstructor( + classNode, primaryConstructor, selfType.source, classWrapper, @@ -670,6 +671,7 @@ class DeclarationsConverter( ) //parse primary constructor convertPrimaryConstructor( + objectDeclaration, primaryConstructor, delegatedSelfType.source, classWrapper, @@ -760,6 +762,7 @@ class DeclarationsConverter( ) superTypeRefs += enumClassWrapper.delegatedSuperTypeRef convertPrimaryConstructor( + enumEntry, null, enumEntry.toFirSourceElement(), enumClassWrapper, @@ -822,6 +825,7 @@ class DeclarationsConverter( * primaryConstructor branch */ private fun convertPrimaryConstructor( + classNode: LighterASTNode, primaryConstructor: LighterASTNode?, selfTypeSource: KtSourceElement?, classWrapper: ClassWrapper, @@ -896,6 +900,7 @@ class DeclarationsConverter( this.valueParameters += valueParameters.map { it.firValueParameter } delegatedConstructor = firDelegatedCall this.body = null + this.contextReceivers.addAll(convertContextReceivers(classNode)) }.apply { containingClassForStaticMemberAttr = currentDispatchReceiverType()!!.lookupTag }, valueParameters diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 978fad28ed1..48bbf628a26 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -894,6 +894,7 @@ open class RawFirBuilder( symbol = FirConstructorSymbol(callableIdForClassConstructor()) delegatedConstructor = firDelegatedCall typeParameters += constructorTypeParametersFromConstructedClass(ownerTypeParameters) + this.contextReceivers.addAll(convertContextReceivers(owner.contextReceivers)) this@toFirConstructor?.extractAnnotationsTo(this) this@toFirConstructor?.extractValueParametersTo(this, ValueParameterDeclaration.PRIMARY_CONSTRUCTOR) this.body = body diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.fir.kt deleted file mode 100644 index 33b8cd71411..00000000000 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.fir.kt +++ /dev/null @@ -1,15 +0,0 @@ -// !LANGUAGE: +ContextReceivers - -context(T) class A - -context(Collection

) class B

- -fun Int.foo() { - A() - A() -} - -fun Collection.bar() { - B() - B() -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.kt index 612671fac5b..8615ea893f2 100644 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.kt +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/genericOuterClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +ContextReceivers context(T) class A diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.fir.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.fir.kt deleted file mode 100644 index 355ea33434f..00000000000 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.fir.kt +++ /dev/null @@ -1,18 +0,0 @@ -// !LANGUAGE: +ContextReceivers -// !DIAGNOSTICS: -UNUSED_PARAMETER - -class Outer { - val x: Int = 1 -} - -context(Outer) -class Inner(arg: Any) { - fun bar() = x -} - -fun f(outer: Outer) { - Inner(1) - with(outer) { - Inner(3) - } -} diff --git a/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.kt b/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.kt index 4ab38d4d86e..433a8890dc9 100644 --- a/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.kt +++ b/compiler/testData/diagnostics/tests/extensions/contextReceivers/outerClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +ContextReceivers // !DIAGNOSTICS: -UNUSED_PARAMETER