diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt index cfb10b74726..2a20688e26a 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt @@ -426,14 +426,24 @@ private class ScriptsToClassesLowering(val context: JvmBackendContext, val inner add(it) ++parametersIndex } - addAll(irScript.explicitCallParameters.map { - IrValueParameterImpl( - it.startOffset, it.endOffset, - IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, IrValueParameterSymbolImpl(), - it.name, index = parametersIndex++, type = it.type, - varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false - ).also { it.parent = irScript } - }) + addAll( + irScript.explicitCallParameters.map { + context.irFactory.createValueParameter( + startOffset = it.startOffset, + endOffset = it.endOffset, + origin = IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, + name = it.name, + type = it.type, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(), + index = parametersIndex++, + varargElementType = null, + isCrossinline = false, + isNoinline = false, + isHidden = false, + ).also { it.parent = irScript } + }, + ) implicitReceiversFieldsWithParameters.forEach {(_, param) -> add(param) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt index 9ec8d9e8096..0c1f1b4baa8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrValueParameterImpl.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ParameterDescriptor +import org.jetbrains.kotlin.ir.IrImplementationDetail import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent @@ -17,7 +18,10 @@ import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.name.Name -class IrValueParameterImpl( +// IMPORTANT: This class is used in the Compose IDE plugin (platform 233). +// Don't rename it or change its constructor's signature so as not to break binary compatibility when an older version of +// the Compose IDE plugin is used with a newer version of the Kotlin IDE plugin that vendors the updated compiler version. +class IrValueParameterImpl @IrImplementationDetail constructor( override val startOffset: Int, override val endOffset: Int, override var origin: IrDeclarationOrigin, diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/ir/ComposeLikeGenerationExtension.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/ir/ComposeLikeGenerationExtension.kt index d64c038fdab..bd1e5c926e9 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/ir/ComposeLikeGenerationExtension.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/ir/ComposeLikeGenerationExtension.kt @@ -33,7 +33,6 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol @@ -150,19 +149,19 @@ class ComposeLikeDefaultArgumentRewriter( declaration.valueParameters.forEach { param -> newParameters.add( if (param.defaultValue != null) { - val result = IrValueParameterImpl( - param.startOffset, - param.endOffset, - param.origin, - IrValueParameterSymbolImpl(), - param.name, - index = param.index, + val result = context.irFactory.createValueParameter( + startOffset = param.startOffset, + endOffset = param.endOffset, + origin = param.origin, + name = param.name, type = defaultParameterType(param), + isAssignable = param.defaultValue != null, + symbol = IrValueParameterSymbolImpl(), + index = param.index, varargElementType = param.varargElementType, isCrossinline = param.isCrossinline, isNoinline = param.isNoinline, isHidden = false, - isAssignable = param.defaultValue != null ).also { it.defaultValue = param.defaultValue it.parent = declaration diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt index 805b1d3d6a8..90af466b66d 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BuiltInFictitiousFunctionIrClassFactory.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.descriptors.IrAbstractDescriptorBasedFunctionFactory import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -264,12 +263,19 @@ internal class BuiltInFictitiousFunctionIrClassFactory( ).apply { parent = functionClass valueParameters += invokeFunctionDescriptor.valueParameters.map { - IrValueParameterImpl( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS, - IrValueParameterSymbolImpl(it), it.name, it.index, - functionClass.typeParameters[it.index].defaultType, null, - it.isCrossinline, it.isNoinline, - isHidden = false, isAssignable = false + symbolTable.irFactory.createValueParameter( + startOffset = SYNTHETIC_OFFSET, + endOffset = SYNTHETIC_OFFSET, + origin = DECLARATION_ORIGIN_FUNCTION_CLASS, + name = it.name, + type = functionClass.typeParameters[it.index].defaultType, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(it), + index = it.index, + varargElementType = null, + isCrossinline = it.isCrossinline, + isNoinline = it.isNoinline, + isHidden = false, ).also { it.parent = this } } if (!isFakeOverride) @@ -316,19 +322,19 @@ internal class BuiltInFictitiousFunctionIrClassFactory( private fun IrFunction.createValueParameter(descriptor: ParameterDescriptor): IrValueParameter { val varargType = if (descriptor is ValueParameterDescriptor) descriptor.varargElementType else null - return IrValueParameterImpl( - offset, - offset, - memberOrigin, - IrValueParameterSymbolImpl(descriptor), - descriptor.name, - descriptor.indexOrMinusOne, - toIrType(descriptor.type), - varargType?.let { toIrType(it) }, - descriptor.isCrossinline, - descriptor.isNoinline, + return symbolTable.irFactory.createValueParameter( + startOffset = offset, + endOffset = offset, + origin = memberOrigin, + name = descriptor.name, + type = toIrType(descriptor.type), + isAssignable = false, + symbol = IrValueParameterSymbolImpl(descriptor), + index = descriptor.indexOrMinusOne, + varargElementType = varargType?.let { toIrType(it) }, + isCrossinline = descriptor.isCrossinline, + isNoinline = descriptor.isNoinline, isHidden = false, - isAssignable = false ).also { it.parent = this } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt index 3a2f65378db..b02e79fd6f2 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGen.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl @@ -1157,18 +1156,19 @@ private class ObjCBlockPointerValuePassing( ) irClass.addChild(constructor) - val constructorParameter = IrValueParameterImpl( - startOffset, endOffset, - OBJC_BLOCK_FUNCTION_IMPL, - IrValueParameterSymbolImpl(), - Name.identifier("blockPointer"), - 0, - symbols.nativePtrType, + val constructorParameter = context.irFactory.createValueParameter( + startOffset = startOffset, + endOffset = endOffset, + origin = OBJC_BLOCK_FUNCTION_IMPL, + name = Name.identifier("blockPointer"), + type = symbols.nativePtrType, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(), + index = 0, varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, - isAssignable = false ) constructor.valueParameters += constructorParameter constructorParameter.parent = constructor @@ -1208,18 +1208,19 @@ private class ObjCBlockPointerValuePassing( invokeMethod.createDispatchReceiverParameter() invokeMethod.valueParameters += (0 until parameterCount).map { index -> - val parameter = IrValueParameterImpl( - startOffset, endOffset, - OBJC_BLOCK_FUNCTION_IMPL, - IrValueParameterSymbolImpl(), - Name.identifier("p$index"), - index, - functionType.arguments[index].typeOrNull!!, + val parameter = context.irFactory.createValueParameter( + startOffset = startOffset, + endOffset = endOffset, + origin = OBJC_BLOCK_FUNCTION_IMPL, + name = Name.identifier("p$index"), + type = functionType.arguments[index].typeOrNull!!, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(), + index = index, varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, - isAssignable = false ) parameter.parent = invokeMethod parameter diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt index 85568023d13..e407984684e 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/cgen/CBridgeGenUtils.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl @@ -81,15 +80,19 @@ internal class KotlinBridgeBuilder( fun addParameter(type: IrType): IrValueParameter { val index = counter++ - return IrValueParameterImpl( - bridge.startOffset, bridge.endOffset, bridge.origin, - IrValueParameterSymbolImpl(), - Name.identifier("p$index"), index, type, - null, + return irBuilder.context.irFactory.createValueParameter( + startOffset = bridge.startOffset, + endOffset = bridge.endOffset, + origin = bridge.origin, + name = Name.identifier("p$index"), + type = type, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(), + index = index, + varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, - isAssignable = false ).apply { parent = bridge bridge.valueParameters += this diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt index 07d0fdcf4c5..7a42efc0654 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/BridgesBuilding.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -148,18 +147,19 @@ internal class WorkersBridgesBuilding(val context: Context) : DeclarationContain ) runtimeJobFunction.valueParameters += - IrValueParameterImpl( - startOffset, endOffset, - IrDeclarationOrigin.DEFINED, - IrValueParameterSymbolImpl(), - arg.name, - arg.index, + context.irFactory.createValueParameter( + startOffset = startOffset, + endOffset = endOffset, + origin = IrDeclarationOrigin.DEFINED, + name = arg.name, type = context.irBuiltIns.anyNType, + isAssignable = arg.isAssignable, + symbol = IrValueParameterSymbolImpl(), + index = arg.index, varargElementType = null, isCrossinline = arg.isCrossinline, isNoinline = arg.isNoinline, isHidden = arg.isHidden, - isAssignable = arg.isAssignable ) } val overriddenJobDescriptor = OverriddenFunctionInfo(jobFunction, runtimeJobFunction) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumConstructorsLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumConstructorsLowering.kt index cdfb3609fe9..e4fd3faf271 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumConstructorsLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/EnumConstructorsLowering.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -124,18 +123,19 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas } fun createSynthesizedValueParameter(index: Int, name: String, type: IrType): IrValueParameter = - IrValueParameterImpl( - startOffset, endOffset, - DECLARATION_ORIGIN_ENUM, - IrValueParameterSymbolImpl(), - Name.identifier(name), - index, - type, + context.irFactory.createValueParameter( + startOffset = startOffset, + endOffset = endOffset, + origin = DECLARATION_ORIGIN_ENUM, + name = Name.identifier(name), + type = type, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(), + index = index, varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, - isAssignable = false ).apply { parent = loweredConstructor } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt index 44fa78faf85..02184fdc990 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/InteropLowering.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.objcinterop.* @@ -387,18 +386,19 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) : ) newFunction.valueParameters += parameterTypes.mapIndexed { index, type -> - IrValueParameterImpl( - function.startOffset, function.endOffset, - IrDeclarationOrigin.DEFINED, - IrValueParameterSymbolImpl(), - Name.identifier("p$index"), - index, - type, + context.irFactory.createValueParameter( + startOffset = function.startOffset, + endOffset = function.endOffset, + origin = IrDeclarationOrigin.DEFINED, + name = Name.identifier("p$index"), + type = type, + isAssignable = false, + symbol = IrValueParameterSymbolImpl(), + index = index, varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, - isAssignable = false ).apply { parent = newFunction }