diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt index b1883332329..499d147fa20 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt @@ -7,24 +7,21 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.ir.* -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* +import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol -import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail @@ -271,31 +268,25 @@ abstract class AbstractSuspendFunctionsLowering(val co ) private inner class CoroutineBuilder(val irFunction: IrFunction, val functionReference: IrFunctionReference?) { - - private val startOffset = irFunction.startOffset - private val endOffset = irFunction.endOffset private val functionParameters = irFunction.explicitParameters private val boundFunctionParameters = functionReference?.getArgumentsWithIr()?.map { it.first } private val unboundFunctionParameters = boundFunctionParameters?.let { functionParameters - it } - private val coroutineClass: IrClass = WrappedClassDescriptor().let { d -> - IrClassImpl( - startOffset, endOffset, - DECLARATION_ORIGIN_COROUTINE_IMPL, - IrClassSymbolImpl(d), - nameForCoroutineClass(irFunction), - ClassKind.CLASS, - irFunction.visibility, - Modality.FINAL - ).apply { - d.bind(this) + private val coroutineClass: IrClass = + buildClass { + startOffset = irFunction.startOffset + endOffset = irFunction.endOffset + origin = DECLARATION_ORIGIN_COROUTINE_IMPL + name = nameForCoroutineClass(irFunction) + visibility = irFunction.visibility + }.apply { parent = irFunction.parent createParameterDeclarations() typeParameters = irFunction.typeParameters.map { typeParam -> typeParam.copyToWithoutSuperTypes(this).apply { superTypes += typeParam.superTypes } } } - } + private val coroutineClassThis = coroutineClass.thisReceiver!! private val continuationType = continuationClassSymbol.typeWith(irFunction.returnType) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index cb77575ea36..c4d0f7e608d 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -19,14 +19,14 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource import org.jetbrains.kotlin.types.Variance -fun IrClassBuilder.buildClass(): IrClass { +@PublishedApi +internal fun IrClassBuilder.buildClass(): IrClass { val wrappedDescriptor = WrappedClassDescriptor() return IrClassImpl( startOffset, endOffset, origin, IrClassSymbolImpl(wrappedDescriptor), name, kind, visibility, modality, - isCompanion = isCompanion, isInner = isInner, isData = isData, isExternal = isExternal, - isInline = isInline, isExpect = isExpect, isFun = isFun + isCompanion, isInner, isData, isExternal, isInline, isExpect, isFun ).also { wrappedDescriptor.bind(it) } @@ -38,7 +38,6 @@ inline fun buildClass(builder: IrClassBuilder.() -> Unit) = buildClass() } - fun IrFieldBuilder.buildField(): IrField { val wrappedDescriptor = WrappedFieldDescriptor() return IrFieldImpl( diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt index c5e0ce1ae0a..7662add1f8e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/coroutines/AbstractSuspendFunctionsLowering.kt @@ -8,24 +8,21 @@ package org.jetbrains.kotlin.ir.backend.js.lower.coroutines import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.ir.* import org.jetbrains.kotlin.backend.common.lower.createIrBuilder -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.backend.js.lower.CallableReferenceLowering import org.jetbrains.kotlin.ir.builders.* +import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol -import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail @@ -224,17 +221,14 @@ abstract class AbstractSuspendFunctionsLowering(val co else buildNewCoroutineClass(function) } - private fun buildNewCoroutineClass(function: IrSimpleFunction): IrClass = WrappedClassDescriptor().let { d -> - IrClassImpl( - startOffset, endOffset, - DECLARATION_ORIGIN_COROUTINE_IMPL, - IrClassSymbolImpl(d), - nameForCoroutineClass(function), - ClassKind.CLASS, - function.visibility, - Modality.FINAL - ).apply { - d.bind(this) + private fun buildNewCoroutineClass(function: IrSimpleFunction): IrClass = + buildClass { + startOffset = function.startOffset + endOffset = function.endOffset + origin = DECLARATION_ORIGIN_COROUTINE_IMPL + name = nameForCoroutineClass(function) + visibility = function.visibility + }.apply { parent = function.parent createParameterDeclarations() typeParameters = function.typeParameters.map { typeParam -> @@ -242,7 +236,6 @@ abstract class AbstractSuspendFunctionsLowering(val co typeParam.copyToWithoutSuperTypes(this).apply { superTypes += typeParam.superTypes } } } - } private fun buildConstructor(): IrConstructor { if (isSuspendLambda) { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt index c180fc03304..8efbcc3d5f9 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/descriptors/JvmDeclarationFactory.kt @@ -17,20 +17,13 @@ import org.jetbrains.kotlin.builtins.CompanionObjectMapping.isMappedIntrinsicCom import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor -import org.jetbrains.kotlin.ir.builders.declarations.buildField -import org.jetbrains.kotlin.ir.builders.declarations.buildFun -import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter +import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.builders.setSourceRange import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor import org.jetbrains.kotlin.ir.expressions.IrExpressionBody -import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.java.JvmAbi @@ -245,17 +238,12 @@ class JvmDeclarationFactory( fun getDefaultImplsClass(interfaceClass: IrClass): IrClass = defaultImplsClasses.getOrPut(interfaceClass) { - val descriptor = WrappedClassDescriptor() - IrClassImpl( - interfaceClass.startOffset, interfaceClass.endOffset, - JvmLoweredDeclarationOrigin.DEFAULT_IMPLS, - IrClassSymbolImpl(descriptor), - Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME), - ClassKind.CLASS, - Visibilities.PUBLIC, - Modality.FINAL - ).apply { - descriptor.bind(this) + buildClass { + startOffset = interfaceClass.startOffset + endOffset = interfaceClass.endOffset + origin = JvmLoweredDeclarationOrigin.DEFAULT_IMPLS + name = Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME) + }.apply { parent = interfaceClass createImplicitParameterDeclarationWithWrappedDescriptor() }