diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt index f7c745c3bad..d589327bcbc 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/ClassMemberGenerator.kt @@ -125,14 +125,14 @@ internal class ClassMemberGenerator( irFunction.body = IrSyntheticBodyImpl(startOffset, endOffset, kind) } irFunction.parent is IrClass && irFunction.parentAsClass.isData -> { - val classId = firFunction?.symbol?.dispatchReceiverClassOrNull()?.classId + val lookupTag = firFunction?.symbol?.dispatchReceiverClassOrNull() when { DataClassMembersGenerator.isComponentN(irFunction) -> firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) } - ?: DataClassMembersGenerator(components).generateDataClassComponentBody(irFunction, classId!!) + ?: DataClassMembersGenerator(components).generateDataClassComponentBody(irFunction, lookupTag!!) DataClassMembersGenerator.isCopy(irFunction) -> firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) } - ?: DataClassMembersGenerator(components).generateDataClassCopyBody(irFunction, classId!!) + ?: DataClassMembersGenerator(components).generateDataClassCopyBody(irFunction, lookupTag!!) else -> irFunction.body = firFunction?.body?.let { visitor.convertToIrBlockBody(it) } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index 0a57abffb52..c5e3a584bc6 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -16,7 +16,9 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.CallableId +import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl +import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.ConeStarProjection @@ -50,20 +52,24 @@ import org.jetbrains.kotlin.name.Name class DataClassMembersGenerator(val components: Fir2IrComponents) { fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List = - MyDataClassMethodsGenerator(irClass, klass.symbol.classId, IrDeclarationOrigin.GENERATED_INLINE_CLASS_MEMBER).generate(klass) + MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_INLINE_CLASS_MEMBER).generate(klass) fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List = - MyDataClassMethodsGenerator(irClass, klass.symbol.classId, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate(klass) + MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate(klass) - fun generateDataClassComponentBody(irFunction: IrFunction, classId: ClassId) = - MyDataClassMethodsGenerator(irFunction.parentAsClass, classId, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER) + fun generateDataClassComponentBody(irFunction: IrFunction, lookupTag: ConeClassLikeLookupTag) = + MyDataClassMethodsGenerator(irFunction.parentAsClass, lookupTag, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER) .generateComponentBody(irFunction) - fun generateDataClassCopyBody(irFunction: IrFunction, classId: ClassId) = - MyDataClassMethodsGenerator(irFunction.parentAsClass, classId, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER) + fun generateDataClassCopyBody(irFunction: IrFunction, lookupTag: ConeClassLikeLookupTag) = + MyDataClassMethodsGenerator(irFunction.parentAsClass, lookupTag, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER) .generateCopyBody(irFunction) - private inner class MyDataClassMethodsGenerator(val irClass: IrClass, val classId: ClassId, val origin: IrDeclarationOrigin) { + private inner class MyDataClassMethodsGenerator( + val irClass: IrClass, + val lookupTag: ConeClassLikeLookupTag, + val origin: IrDeclarationOrigin + ) { private val irDataClassMembersGenerator = object : DataClassMembersGenerator( IrGeneratorContextBase(components.irBuiltIns), components.symbolTable, @@ -226,7 +232,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { val firFunction = buildSimpleFunction { origin = FirDeclarationOrigin.Synthetic this.name = name - this.symbol = FirNamedFunctionSymbol(CallableId(classId, name)) + this.symbol = FirNamedFunctionSymbol(CallableId(lookupTag.classId, name)) this.status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL) this.session = components.session this.returnTypeRef = when (returnType) { @@ -249,13 +255,11 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { } ) } - dispatchReceiverType = - ConeClassLikeLookupTagImpl(classId) - .constructType( - (1..irClass.typeParameters.size).map { ConeStarProjection }.toTypedArray(), isNullable = false - ) + dispatchReceiverType = lookupTag.constructType( + (1..irClass.typeParameters.size).map { ConeStarProjection }.toTypedArray(), isNullable = false + ) } - val signature = if (classId.isLocal) null else components.signatureComposer.composeSignature(firFunction) + val signature = if (lookupTag.classId.isLocal) null else components.signatureComposer.composeSignature(firFunction) return components.declarationStorage.declareIrSimpleFunction(signature, null) { symbol -> components.irFactory.createFunction( UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, name, DescriptorVisibilities.PUBLIC, Modality.OPEN, returnType,