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 7d2e1a1a1ad..01a648be256 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 @@ -1019,9 +1019,7 @@ class DeclarationsConverter( null, session, FirDeclarationOrigin.Source, returnType, propertyVisibility ).also { it.status = defaultAccessorStatus() - currentDispatchReceiverType()?.lookupTag?.let { lookupTag -> - it.containingClassAttr = lookupTag - } + it.initContainingClassAttr() } // NOTE: We still need the setter even for a val property so we can report errors (e.g., VAL_WITH_SETTER). this.setter = convertedAccessors.find { it.isSetter } @@ -1030,9 +1028,7 @@ class DeclarationsConverter( null, session, FirDeclarationOrigin.Source, returnType, propertyVisibility ).also { it.status = defaultAccessorStatus() - currentDispatchReceiverType()?.lookupTag?.let { lookupTag -> - it.containingClassAttr = lookupTag - } + it.initContainingClassAttr() } } else null @@ -1176,9 +1172,7 @@ class DeclarationsConverter( .also { accessor -> accessor.annotations += modifiers.annotations accessor.status = status - currentDispatchReceiverType()?.lookupTag?.let { lookupTag -> - accessor.containingClassAttr = lookupTag - } + accessor.initContainingClassAttr() } } val target = FirFunctionTarget(labelName = null, isLambda = false) @@ -1207,9 +1201,7 @@ class DeclarationsConverter( context.firFunctionTargets.removeLast() }.also { target.bind(it) - currentDispatchReceiverType()?.lookupTag?.let { lookupTag -> - it.containingClassAttr = lookupTag - } + it.initContainingClassAttr() } } 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 4a65c66d682..2b9a2e5556d 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 @@ -357,9 +357,7 @@ open class RawFirBuilder( this.contractDescription = it } }.also { - currentDispatchReceiverType()?.lookupTag?.let { lookupTag -> - it.containingClassAttr = lookupTag - } + it.initContainingClassAttr() accessorTarget.bind(it) this@RawFirBuilder.context.firFunctionTargets.removeLast() } @@ -382,9 +380,7 @@ open class RawFirBuilder( it.extractAnnotationsFrom(this) } it.status = status - currentDispatchReceiverType()?.lookupTag?.let { lookupTag -> - it.containingClassAttr = lookupTag - } + it.initContainingClassAttr() } } else -> { diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 1772615e8a3..36e93094208 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -1140,6 +1140,11 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte } } + protected fun FirCallableDeclaration<*>.initContainingClassAttr() { + val currentDispatchReceiverType = currentDispatchReceiverType() ?: return + containingClassAttr = currentDispatchReceiverType.lookupTag + } + private fun FirVariable<*>.toQualifiedAccess(): FirQualifiedAccessExpression = buildQualifiedAccessExpression { calleeReference = buildResolvedNamedReference { source = this@toQualifiedAccess.source