diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt index 40b4abdd2aa..a11dc642dc9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt @@ -1036,9 +1036,11 @@ class IrBuiltInsOverFir( this.isFinal = isConst }.also { if (fieldInit != null) { - it.initializer = irFactory.createExpressionBody(0, 0) { - expression = fieldInit - } + it.initializer = irFactory.createExpressionBody( + startOffset = 0, + endOffset = 0, + expression = fieldInit, + ) } } } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt index 76dd4ddc75d..e58f9313291 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InitializersLowering.kt @@ -106,9 +106,11 @@ class InitializersCleanupLowering( } else { declaration.initializer?.let { declaration.initializer = - context.irFactory.createExpressionBody(it.startOffset, it.endOffset) { - expression = it.expression.deepCopyWithSymbols() - } + context.irFactory.createExpressionBody( + startOffset = it.startOffset, + endOffset = it.endOffset, + expression = it.expression.deepCopyWithSymbols(), + ) } } } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index e461ccb360e..58afabd5e49 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -44,9 +44,11 @@ class InnerClassesLowering(val context: BackendContext, private val innerClasses val variableRemapper = VariableRemapper(oldConstructorParameterToNew) for ((oldParam, newParam) in oldConstructorParameterToNew.entries) { newParam.defaultValue = oldParam.defaultValue?.let { oldDefault -> - context.irFactory.createExpressionBody(oldDefault.startOffset, oldDefault.endOffset) { - expression = oldDefault.expression.transform(variableRemapper, null).patchDeclarationParents(newConstructor) - } + context.irFactory.createExpressionBody( + startOffset = oldDefault.startOffset, + endOffset = oldDefault.endOffset, + expression = oldDefault.expression.transform(variableRemapper, null).patchDeclarationParents(newConstructor), + ) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CopyAccessorBodyLowerings.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CopyAccessorBodyLowerings.kt index b96406de4ae..4dc27dad669 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CopyAccessorBodyLowerings.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CopyAccessorBodyLowerings.kt @@ -26,9 +26,11 @@ class CopyAccessorBodyLowerings(private val context: CommonBackendContext) : Dec if (declaration is IrField) { declaration.initializer?.let { originalBody -> - declaration.initializer = context.irFactory.createExpressionBody(originalBody.startOffset, originalBody.endOffset) { - this.expression = originalBody.expression.deepCopyWithSymbols(declaration) - } + declaration.initializer = context.irFactory.createExpressionBody( + startOffset = originalBody.startOffset, + endOffset = originalBody.endOffset, + expression = originalBody.expression.deepCopyWithSymbols(declaration), + ) } } 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 942a861726f..aac87e6df72 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 @@ -126,8 +126,11 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar old.valueParameter = new old.defaultValue?.let { default -> - new.defaultValue = context.irFactory.createExpressionBody(default.startOffset, default.endOffset) { + new.defaultValue = context.irFactory.createExpressionBody( + startOffset = default.startOffset, + endOffset = default.endOffset, expression = default.expression + ).apply { expression.patchDeclarationParents(newConstructor) context.fixReferencesToConstructorParameters(enumClass, this) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt index e2cda570a51..0534b6190c7 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/PrivateMembersLowering.kt @@ -104,9 +104,11 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTrans parameterMapping[it]?.apply { it.defaultValue?.let { originalDefault -> - defaultValue = context.irFactory.createExpressionBody(it.startOffset, it.endOffset) { - expression = (originalDefault.copyWithParameters() as IrExpressionBody).expression - } + defaultValue = context.irFactory.createExpressionBody( + startOffset = it.startOffset, + endOffset = it.endOffset, + expression = (originalDefault.copyWithParameters() as IrExpressionBody).expression, + ) } } } @@ -116,9 +118,11 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTrans is IrBlockBody -> context.irFactory.createBlockBody(it.startOffset, it.endOffset) { statements += (it.copyWithParameters() as IrBlockBody).statements } - is IrExpressionBody -> context.irFactory.createExpressionBody(it.startOffset, it.endOffset) { - expression = (it.copyWithParameters() as IrExpressionBody).expression - } + is IrExpressionBody -> context.irFactory.createExpressionBody( + startOffset = it.startOffset, + endOffset = it.endOffset, + expression = (it.copyWithParameters() as IrExpressionBody).expression, + ) is IrSyntheticBody -> it else -> compilationException( "Unexpected body kind", diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt index 11b6d08442d..0a46f14ffbf 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/inline/RemoveInlineDeclarationsWithReifiedTypeParametersLowering.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.inline import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.backend.common.ir.isInlineFunWithReifiedParameter -import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrProperty -import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols @@ -41,9 +38,11 @@ class CopyInlineFunctionBodyLowering(val context: JsIrBackendContext) : Declarat if (declaration is IrValueParameter && declaration.parent.let { it is IrFunction && it.isInline }) { declaration.defaultValue?.let { originalDefault -> declaration.defaultValue = - context.irFactory.createExpressionBody(originalDefault.startOffset, originalDefault.endOffset) { - expression = originalDefault.expression.deepCopyWithSymbols(declaration.parent) - } + context.irFactory.createExpressionBody( + startOffset = originalDefault.startOffset, + endOffset = originalDefault.endOffset, + expression = originalDefault.expression.deepCopyWithSymbols(declaration.parent), + ) } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt index 019e238f954..7fd5ca9e11b 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.Scope import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.createExpressionBody import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt index 948bc8b28f2..c384dc89223 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt @@ -210,16 +210,6 @@ interface IrFactory { fun createExpressionBody( startOffset: Int, endOffset: Int, - initializer: IrExpressionBody.() -> Unit, - ): IrExpressionBody - - fun createExpressionBody( - startOffset: Int, - endOffset: Int, - expression: IrExpression, - ): IrExpressionBody - - fun createExpressionBody( expression: IrExpression, ): IrExpressionBody diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactoryHelpers.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactoryHelpers.kt new file mode 100644 index 00000000000..b1be45c978e --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactoryHelpers.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ir.declarations + +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody + +fun IrFactory.createExpressionBody(expression: IrExpression): IrExpressionBody = + createExpressionBody(expression.startOffset, expression.endOffset, expression) \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index d6ebbc0cad4..15831c4e905 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -251,13 +251,6 @@ abstract class AbstractIrFactoryImpl : IrFactory { isCrossinline, isNoinline, isHidden, isAssignable, factory = this ) - override fun createExpressionBody( - startOffset: Int, - endOffset: Int, - initializer: IrExpressionBody.() -> Unit, - ): IrExpressionBody = - IrExpressionBodyImpl(startOffset, endOffset, initializer) - override fun createExpressionBody( startOffset: Int, endOffset: Int, @@ -265,11 +258,6 @@ abstract class AbstractIrFactoryImpl : IrFactory { ): IrExpressionBody = IrExpressionBodyImpl(startOffset, endOffset, expression) - override fun createExpressionBody( - expression: IrExpression, - ): IrExpressionBody = - IrExpressionBodyImpl(expression) - override fun createBlockBody( startOffset: Int, endOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt index 4fe54adff93..21c72368d65 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyField.kt @@ -9,10 +9,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET -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.MetadataSource +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt index 328778c6b20..f352f8e5019 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrExpressionBodyImpl.kt @@ -24,20 +24,11 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody class IrExpressionBodyImpl( override val startOffset: Int, override val endOffset: Int, - initializer: (IrExpressionBody.() -> Unit)? = null + override var expression: IrExpression, ) : IrExpressionBody() { - init { - initializer?.invoke(this) - } - - constructor(startOffset: Int, endOffset: Int, expression: IrExpression) : this(startOffset, endOffset) { - this.expression = expression - } constructor(expression: IrExpression) : this(expression.startOffset, expression.endOffset, expression) - override lateinit var expression: IrExpression - override val factory: IrFactory get() = IrFactoryImpl } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index fd8b5f91ecd..cf65308e869 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -790,10 +790,12 @@ fun IrValueParameter.copyTo( ): IrValueParameter { val symbol = IrValueParameterSymbolImpl() val defaultValueCopy = defaultValue?.let { originalDefault -> - factory.createExpressionBody(originalDefault.startOffset, originalDefault.endOffset) { - expression = originalDefault.expression.deepCopyWithVariables().also { - it.patchDeclarationParents(irFunction) - } + factory.createExpressionBody( + startOffset = originalDefault.startOffset, + endOffset = originalDefault.endOffset, + expression = originalDefault.expression.deepCopyWithVariables(), + ).apply { + expression.patchDeclarationParents(irFunction) } } return factory.createValueParameter(