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 499d147fa20..4a43bdadcd0 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 @@ -14,15 +14,13 @@ 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.buildField import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -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.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.defaultType @@ -618,21 +616,16 @@ abstract class AbstractSuspendFunctionsLowering(val co } fun IrClass.addField(name: Name, type: IrType, isMutable: Boolean): IrField { - val descriptor = WrappedFieldDescriptor() - val symbol = IrFieldSymbolImpl(descriptor) - return IrFieldImpl( - startOffset, - endOffset, - DECLARATION_ORIGIN_COROUTINE_IMPL, - symbol, - name, - type, - Visibilities.PRIVATE, - isFinal = !isMutable, - isExternal = false, - isStatic = false - ).also { - descriptor.bind(it) + val klass = this + return buildField { + this.startOffset = klass.startOffset + this.endOffset = klass.endOffset + this.origin = DECLARATION_ORIGIN_COROUTINE_IMPL + this.name = name + this.type = type + this.visibility = Visibilities.PRIVATE + this.isFinal = !isMutable + }.also { it.parent = this addChild(it) } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index f71cbe024f4..645acb119ce 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -18,17 +18,15 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.Scope 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.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrValueSymbol -import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.impl.IrTypeAbbreviationImpl @@ -725,25 +723,20 @@ class LocalDeclarationsLowering( parent: IrClass, fieldType: IrType, isCrossinline: Boolean - ): IrField { - val descriptor = WrappedFieldDescriptor() - val symbol = IrFieldSymbolImpl(descriptor) - return IrFieldImpl( - startOffset, - endOffset, - if (isCrossinline) DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE else DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE, - symbol, - name, - fieldType, - visibility, - isFinal = true, - isExternal = false, - isStatic = false - ).also { - descriptor.bind(it) + ): IrField = + buildField { + this.startOffset = startOffset + this.endOffset = endOffset + this.origin = + if (isCrossinline) DECLARATION_ORIGIN_FIELD_FOR_CROSSINLINE_CAPTURED_VALUE + else DECLARATION_ORIGIN_FIELD_FOR_CAPTURED_VALUE + this.name = name + this.type = fieldType + this.visibility = visibility + this.isFinal = true + }.also { it.parent = parent } - } private fun createFieldsForCapturedValues(localClassContext: LocalClassContext) { val classDeclaration = localClassContext.declaration 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 c4d0f7e608d..5a5aeb6d6b6 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 @@ -72,7 +72,8 @@ fun IrClass.addField(fieldName: Name, fieldType: IrType, fieldVisibility: Visibi fun IrClass.addField(fieldName: String, fieldType: IrType, fieldVisibility: Visibility = Visibilities.PRIVATE): IrField = addField(Name.identifier(fieldName), fieldType, fieldVisibility) -fun IrPropertyBuilder.buildProperty(originalDescriptor: PropertyDescriptor? = null): IrProperty { +@PublishedApi +internal fun IrPropertyBuilder.buildProperty(originalDescriptor: PropertyDescriptor? = null): IrProperty { val wrappedDescriptor = when (originalDescriptor) { is DescriptorWithContainerSource -> WrappedPropertyDescriptorWithContainerSource(originalDescriptor.containerSource) else -> WrappedPropertyDescriptor() @@ -81,8 +82,7 @@ fun IrPropertyBuilder.buildProperty(originalDescriptor: PropertyDescriptor? = nu startOffset, endOffset, origin, IrPropertySymbolImpl(wrappedDescriptor), name, visibility, modality, - isVar = isVar, isConst = isConst, isLateinit = isLateinit, isDelegated = isDelegated, isExpect = isExpect, isExternal = isExternal, - isFakeOverride = isFakeOverride + isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, isFakeOverride ).also { wrappedDescriptor.bind(it) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt index 15dfabe579e..b031233734d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsDeclarationFactory.kt @@ -13,15 +13,12 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsMapping import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.utils.Namer import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor +import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor -import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.dump @@ -51,27 +48,20 @@ class JsDeclarationFactory(mapping: JsMapping) : DeclarationFactory { } } - private fun createPropertyWithBackingField(name: Name, visibility: Visibility, parent: IrClass, fieldType: IrType, origin: IrDeclarationOrigin): IrField { - val descriptor = WrappedFieldDescriptor() - val symbol = IrFieldSymbolImpl(descriptor) - - return IrFieldImpl( - UNDEFINED_OFFSET, - UNDEFINED_OFFSET, - origin, - symbol, - name, - fieldType, - visibility, - isFinal = true, - isExternal = false, - isStatic = false - ).also { - descriptor.bind(it) + private fun createPropertyWithBackingField( + name: Name, visibility: Visibility, parent: IrClass, fieldType: IrType, origin: IrDeclarationOrigin + ): IrField = + buildField { + this.origin = origin + this.name = name + this.type = fieldType + this.visibility = visibility + this.isFinal = true + this.isExternal = false + this.isStatic = false + }.also { it.parent = parent } - } - override fun getInnerClassConstructorWithOuterThisParameter(innerClassConstructor: IrConstructor): IrConstructor { val innerClass = innerClassConstructor.parent as IrClass diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt index 63ca4a72aff..4735b915d1c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.backend.common.lower.irBlockBody import org.jetbrains.kotlin.backend.common.lower.irIfThen import org.jetbrains.kotlin.backend.common.lower.parents import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext @@ -25,14 +24,11 @@ import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl -import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.makeNullable import org.jetbrains.kotlin.ir.util.* @@ -64,24 +60,24 @@ class EnumUsageLowering(val context: JsIrBackendContext) : BodyLoweringPass { return JsIrBuilder.buildCall(intrinsic, context.irBuiltIns.anyType, listOf(irClass.defaultType)) } - private fun createFieldForEntry(entry: IrEnumEntry, irClass: IrClass): IrField { - val descriptor = WrappedFieldDescriptor() - val symbol = IrFieldSymbolImpl(descriptor) - return entry.run { - IrFieldImpl( - startOffset, endOffset, origin, symbol, name, irClass.defaultType, Visibilities.PUBLIC, - isFinal = false, isExternal = true, isStatic = true - ).also { - descriptor.bind(it) - it.parent = irClass + private fun createFieldForEntry(entry: IrEnumEntry, irClass: IrClass): IrField = + buildField { + startOffset = entry.startOffset + endOffset = entry.endOffset + origin = entry.origin + name = entry.name + type = irClass.defaultType + isFinal = false + isExternal = true + isStatic = true + }.also { + it.parent = irClass - // TODO need a way to emerge local declarations from BodyLoweringPass - stageController.unrestrictDeclarationListsAccess { - irClass.declarations += it - } + // TODO need a way to emerge local declarations from BodyLoweringPass + stageController.unrestrictDeclarationListsAccess { + irClass.declarations += it } } - } private fun lowerEnumEntry(enumEntry: IrEnumEntry, klass: IrClass) = enumEntry.getInstanceFun!!.run { JsIrBuilder.buildCall(symbol) } 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 7662add1f8e..814a6564762 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 @@ -15,15 +15,13 @@ 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.buildField import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -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.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.defaultType @@ -516,23 +514,18 @@ abstract class AbstractSuspendFunctionsLowering(val co } fun IrClass.addField(name: Name, type: IrType, isMutable: Boolean): IrField { - val descriptor = WrappedFieldDescriptor() - val symbol = IrFieldSymbolImpl(descriptor) - return IrFieldImpl( - startOffset, - endOffset, - DECLARATION_ORIGIN_COROUTINE_IMPL, - symbol, - name, - type, - Visibilities.PRIVATE, - isFinal = !isMutable, - isExternal = false, - isStatic = false - ).also { - descriptor.bind(it) + val klass = this + return buildField { + this.startOffset = klass.startOffset + this.endOffset = klass.endOffset + this.origin = DECLARATION_ORIGIN_COROUTINE_IMPL + this.name = name + this.type = type + this.visibility = Visibilities.PRIVATE + this.isFinal = !isMutable + }.also { it.parent = this addChild(it) } } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt index 600da3e1c7e..e7cea9281e8 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RenameFieldsLowering.kt @@ -10,19 +10,17 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.builders.declarations.buildField import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl -import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrGetField import org.jetbrains.kotlin.ir.expressions.IrSetField import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol -import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl import org.jetbrains.kotlin.ir.util.hasAnnotation import org.jetbrains.kotlin.ir.util.patchDeclarationParents import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -105,21 +103,16 @@ private class FieldRenamer(private val newNames: Map) : IrElement override fun visitField(declaration: IrField): IrStatement { val newName = newNames[declaration] ?: return super.visitField(declaration) - - val descriptor = WrappedFieldDescriptor() - val symbol = IrFieldSymbolImpl(descriptor) - return IrFieldImpl( - declaration.startOffset, declaration.endOffset, declaration.origin, symbol, newName, - declaration.type, declaration.visibility, declaration.isFinal, declaration.isExternal, declaration.isStatic, - ).also { - descriptor.bind(it) + return buildField { + updateFrom(declaration) + name = newName + }.also { it.parent = declaration.parent it.initializer = declaration.initializer ?.transform(this, null) ?.patchDeclarationParents(it) - it.metadata = declaration.metadata - newSymbols[declaration] = symbol + newSymbols[declaration] = it.symbol } } }