[IR] Mark IrValueParameterImpl with an opt-in annotation

KT-59318
This commit is contained in:
Sergej Jaskiewicz
2023-12-07 19:08:46 +01:00
committed by Space Team
parent b56a04e796
commit f482b6a458
9 changed files with 110 additions and 87 deletions
@@ -426,14 +426,24 @@ private class ScriptsToClassesLowering(val context: JvmBackendContext, val inner
add(it) add(it)
++parametersIndex ++parametersIndex
} }
addAll(irScript.explicitCallParameters.map { addAll(
IrValueParameterImpl( irScript.explicitCallParameters.map {
it.startOffset, it.endOffset, context.irFactory.createValueParameter(
IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, IrValueParameterSymbolImpl(), startOffset = it.startOffset,
it.name, index = parametersIndex++, type = it.type, endOffset = it.endOffset,
varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false origin = IrDeclarationOrigin.SCRIPT_CALL_PARAMETER,
).also { it.parent = irScript } 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) -> implicitReceiversFieldsWithParameters.forEach {(_, param) ->
add(param) add(param)
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.ir.IrImplementationDetail
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent 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.ir.types.IrType
import org.jetbrains.kotlin.name.Name 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 startOffset: Int,
override val endOffset: Int, override val endOffset: Int,
override var origin: IrDeclarationOrigin, override var origin: IrDeclarationOrigin,
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
import org.jetbrains.kotlin.ir.declarations.* 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.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
@@ -150,19 +149,19 @@ class ComposeLikeDefaultArgumentRewriter(
declaration.valueParameters.forEach { param -> declaration.valueParameters.forEach { param ->
newParameters.add( newParameters.add(
if (param.defaultValue != null) { if (param.defaultValue != null) {
val result = IrValueParameterImpl( val result = context.irFactory.createValueParameter(
param.startOffset, startOffset = param.startOffset,
param.endOffset, endOffset = param.endOffset,
param.origin, origin = param.origin,
IrValueParameterSymbolImpl(), name = param.name,
param.name,
index = param.index,
type = defaultParameterType(param), type = defaultParameterType(param),
isAssignable = param.defaultValue != null,
symbol = IrValueParameterSymbolImpl(),
index = param.index,
varargElementType = param.varargElementType, varargElementType = param.varargElementType,
isCrossinline = param.isCrossinline, isCrossinline = param.isCrossinline,
isNoinline = param.isNoinline, isNoinline = param.isNoinline,
isHidden = false, isHidden = false,
isAssignable = param.defaultValue != null
).also { ).also {
it.defaultValue = param.defaultValue it.defaultValue = param.defaultValue
it.parent = declaration it.parent = declaration
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl 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.descriptors.IrAbstractDescriptorBasedFunctionFactory
import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.linkage.IrProvider
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
@@ -264,12 +263,19 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
).apply { ).apply {
parent = functionClass parent = functionClass
valueParameters += invokeFunctionDescriptor.valueParameters.map { valueParameters += invokeFunctionDescriptor.valueParameters.map {
IrValueParameterImpl( symbolTable.irFactory.createValueParameter(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS, startOffset = SYNTHETIC_OFFSET,
IrValueParameterSymbolImpl(it), it.name, it.index, endOffset = SYNTHETIC_OFFSET,
functionClass.typeParameters[it.index].defaultType, null, origin = DECLARATION_ORIGIN_FUNCTION_CLASS,
it.isCrossinline, it.isNoinline, name = it.name,
isHidden = false, isAssignable = false 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 } ).also { it.parent = this }
} }
if (!isFakeOverride) if (!isFakeOverride)
@@ -316,19 +322,19 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
private fun IrFunction.createValueParameter(descriptor: ParameterDescriptor): IrValueParameter { private fun IrFunction.createValueParameter(descriptor: ParameterDescriptor): IrValueParameter {
val varargType = if (descriptor is ValueParameterDescriptor) descriptor.varargElementType else null val varargType = if (descriptor is ValueParameterDescriptor) descriptor.varargElementType else null
return IrValueParameterImpl( return symbolTable.irFactory.createValueParameter(
offset, startOffset = offset,
offset, endOffset = offset,
memberOrigin, origin = memberOrigin,
IrValueParameterSymbolImpl(descriptor), name = descriptor.name,
descriptor.name, type = toIrType(descriptor.type),
descriptor.indexOrMinusOne, isAssignable = false,
toIrType(descriptor.type), symbol = IrValueParameterSymbolImpl(descriptor),
varargType?.let { toIrType(it) }, index = descriptor.indexOrMinusOne,
descriptor.isCrossinline, varargElementType = varargType?.let { toIrType(it) },
descriptor.isNoinline, isCrossinline = descriptor.isCrossinline,
isNoinline = descriptor.isNoinline,
isHidden = false, isHidden = false,
isAssignable = false
).also { ).also {
it.parent = this it.parent = this
} }
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl 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.*
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
@@ -1157,18 +1156,19 @@ private class ObjCBlockPointerValuePassing(
) )
irClass.addChild(constructor) irClass.addChild(constructor)
val constructorParameter = IrValueParameterImpl( val constructorParameter = context.irFactory.createValueParameter(
startOffset, endOffset, startOffset = startOffset,
OBJC_BLOCK_FUNCTION_IMPL, endOffset = endOffset,
IrValueParameterSymbolImpl(), origin = OBJC_BLOCK_FUNCTION_IMPL,
Name.identifier("blockPointer"), name = Name.identifier("blockPointer"),
0, type = symbols.nativePtrType,
symbols.nativePtrType, isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = 0,
varargElementType = null, varargElementType = null,
isCrossinline = false, isCrossinline = false,
isNoinline = false, isNoinline = false,
isHidden = false, isHidden = false,
isAssignable = false
) )
constructor.valueParameters += constructorParameter constructor.valueParameters += constructorParameter
constructorParameter.parent = constructor constructorParameter.parent = constructor
@@ -1208,18 +1208,19 @@ private class ObjCBlockPointerValuePassing(
invokeMethod.createDispatchReceiverParameter() invokeMethod.createDispatchReceiverParameter()
invokeMethod.valueParameters += (0 until parameterCount).map { index -> invokeMethod.valueParameters += (0 until parameterCount).map { index ->
val parameter = IrValueParameterImpl( val parameter = context.irFactory.createValueParameter(
startOffset, endOffset, startOffset = startOffset,
OBJC_BLOCK_FUNCTION_IMPL, endOffset = endOffset,
IrValueParameterSymbolImpl(), origin = OBJC_BLOCK_FUNCTION_IMPL,
Name.identifier("p$index"), name = Name.identifier("p$index"),
index, type = functionType.arguments[index].typeOrNull!!,
functionType.arguments[index].typeOrNull!!, isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null, varargElementType = null,
isCrossinline = false, isCrossinline = false,
isNoinline = false, isNoinline = false,
isHidden = false, isHidden = false,
isAssignable = false
) )
parameter.parent = invokeMethod parameter.parent = invokeMethod
parameter parameter
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildVariable import org.jetbrains.kotlin.ir.builders.declarations.buildVariable
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl 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.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl
@@ -81,15 +80,19 @@ internal class KotlinBridgeBuilder(
fun addParameter(type: IrType): IrValueParameter { fun addParameter(type: IrType): IrValueParameter {
val index = counter++ val index = counter++
return IrValueParameterImpl( return irBuilder.context.irFactory.createValueParameter(
bridge.startOffset, bridge.endOffset, bridge.origin, startOffset = bridge.startOffset,
IrValueParameterSymbolImpl(), endOffset = bridge.endOffset,
Name.identifier("p$index"), index, type, origin = bridge.origin,
null, name = Name.identifier("p$index"),
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false, isCrossinline = false,
isNoinline = false, isNoinline = false,
isHidden = false, isHidden = false,
isAssignable = false
).apply { ).apply {
parent = bridge parent = bridge
bridge.valueParameters += this bridge.valueParameters += this
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.buildFun import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.* 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.IrBlockBody
import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpression
@@ -148,18 +147,19 @@ internal class WorkersBridgesBuilding(val context: Context) : DeclarationContain
) )
runtimeJobFunction.valueParameters += runtimeJobFunction.valueParameters +=
IrValueParameterImpl( context.irFactory.createValueParameter(
startOffset, endOffset, startOffset = startOffset,
IrDeclarationOrigin.DEFINED, endOffset = endOffset,
IrValueParameterSymbolImpl(), origin = IrDeclarationOrigin.DEFINED,
arg.name, name = arg.name,
arg.index,
type = context.irBuiltIns.anyNType, type = context.irBuiltIns.anyNType,
isAssignable = arg.isAssignable,
symbol = IrValueParameterSymbolImpl(),
index = arg.index,
varargElementType = null, varargElementType = null,
isCrossinline = arg.isCrossinline, isCrossinline = arg.isCrossinline,
isNoinline = arg.isNoinline, isNoinline = arg.isNoinline,
isHidden = arg.isHidden, isHidden = arg.isHidden,
isAssignable = arg.isAssignable
) )
} }
val overriddenJobDescriptor = OverriddenFunctionInfo(jobFunction, runtimeJobFunction) val overriddenJobDescriptor = OverriddenFunctionInfo(jobFunction, runtimeJobFunction)
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.* 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.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol 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 = fun createSynthesizedValueParameter(index: Int, name: String, type: IrType): IrValueParameter =
IrValueParameterImpl( context.irFactory.createValueParameter(
startOffset, endOffset, startOffset = startOffset,
DECLARATION_ORIGIN_ENUM, endOffset = endOffset,
IrValueParameterSymbolImpl(), origin = DECLARATION_ORIGIN_ENUM,
Name.identifier(name), name = Name.identifier(name),
index, type = type,
type, isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null, varargElementType = null,
isCrossinline = false, isCrossinline = false,
isNoinline = false, isNoinline = false,
isHidden = false, isHidden = false,
isAssignable = false
).apply { ).apply {
parent = loweredConstructor parent = loweredConstructor
} }
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.* 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.*
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.objcinterop.* import org.jetbrains.kotlin.ir.objcinterop.*
@@ -387,18 +386,19 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
) )
newFunction.valueParameters += parameterTypes.mapIndexed { index, type -> newFunction.valueParameters += parameterTypes.mapIndexed { index, type ->
IrValueParameterImpl( context.irFactory.createValueParameter(
function.startOffset, function.endOffset, startOffset = function.startOffset,
IrDeclarationOrigin.DEFINED, endOffset = function.endOffset,
IrValueParameterSymbolImpl(), origin = IrDeclarationOrigin.DEFINED,
Name.identifier("p$index"), name = Name.identifier("p$index"),
index, type = type,
type, isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null, varargElementType = null,
isCrossinline = false, isCrossinline = false,
isNoinline = false, isNoinline = false,
isHidden = false, isHidden = false,
isAssignable = false
).apply { ).apply {
parent = newFunction parent = newFunction
} }