[IR] Reorder parameters in IrFactory#createValueParameter

This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
Sergej Jaskiewicz
2023-06-14 14:32:58 +02:00
committed by Space Team
parent 2cc588d6d8
commit 9fcdc10019
23 changed files with 365 additions and 165 deletions
@@ -586,10 +586,18 @@ internal fun IrDeclarationParent.declareThisReceiverParameter(
explicitReceiver: FirReceiverParameter? = null,
): IrValueParameter {
return symbolTable.irFactory.createValueParameter(
startOffset, endOffset, thisOrigin, IrValueParameterSymbolImpl(),
name, UNDEFINED_PARAMETER_INDEX, thisType,
varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = thisOrigin,
name = name,
type = thisType,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).apply {
this.parent = this@declareThisReceiverParameter
explicitReceiver?.let { annotationGenerator.generate(this, it) }
@@ -331,11 +331,18 @@ class Fir2IrDeclarationStorage(
isNoinline: Boolean = false,
): IrValueParameter {
return irFactory.createValueParameter(
startOffset, endOffset, IrDeclarationOrigin.DEFINED, IrValueParameterSymbolImpl(),
name ?: SpecialNames.IMPLICIT_SET_PARAMETER, parent.contextReceiverParametersCount, type,
startOffset = startOffset,
endOffset = endOffset,
origin = IrDeclarationOrigin.DEFINED,
name = name ?: SpecialNames.IMPLICIT_SET_PARAMETER,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = parent.contextReceiverParametersCount,
varargElementType = null,
isCrossinline = isCrossinline, isNoinline = isNoinline,
isHidden = false, isAssignable = false
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = false,
).apply {
this.parent = parent
if (firValueParameter != null) {
@@ -1208,12 +1215,20 @@ class Fir2IrDeclarationStorage(
val type = valueParameter.returnTypeRef.toIrType(typeContext)
val irParameter = valueParameter.convertWithOffsets { startOffset, endOffset ->
irFactory.createValueParameter(
startOffset, endOffset, origin, IrValueParameterSymbolImpl(),
valueParameter.name, index, type,
if (!valueParameter.isVararg) null
else valueParameter.returnTypeRef.coneType.arrayElementType()?.toIrType(typeContext),
isCrossinline = valueParameter.isCrossinline, isNoinline = valueParameter.isNoinline,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = valueParameter.name,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType =
if (!valueParameter.isVararg) null
else valueParameter.returnTypeRef.coneType.arrayElementType()?.toIrType(typeContext),
isCrossinline = valueParameter.isCrossinline,
isNoinline = valueParameter.isNoinline,
isHidden = false,
).apply {
if (!skipDefaultParameter && valueParameter.defaultValue.let {
it != null && (useStubForDefaultValueStub || it !is FirExpressionStub)
@@ -1240,11 +1255,18 @@ class Fir2IrDeclarationStorage(
val type = contextReceiver.typeRef.toIrType()
return contextReceiver.convertWithOffsets { startOffset, endOffset ->
irFactory.createValueParameter(
startOffset, endOffset, IrDeclarationOrigin.DEFINED, IrValueParameterSymbolImpl(),
NameUtils.contextReceiverName(index), index, type,
null,
isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = IrDeclarationOrigin.DEFINED,
name = NameUtils.contextReceiverName(index),
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
}
}
@@ -262,18 +262,18 @@ internal class AdapterGenerator(
origin: IrDeclarationOrigin
): IrValueParameter =
irFactory.createValueParameter(
adapterFunction.startOffset,
adapterFunction.endOffset,
origin,
IrValueParameterSymbolImpl(),
name,
index,
type,
startOffset = adapterFunction.startOffset,
endOffset = adapterFunction.endOffset,
origin = origin,
name = name,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
isHidden = false
).also { irAdapterValueParameter ->
irAdapterValueParameter.parent = adapterFunction
}
@@ -277,8 +277,18 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon
private fun createSyntheticIrParameter(irFunction: IrFunction, name: Name, type: IrType, index: Int = 0): IrValueParameter =
components.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.DEFINED, IrValueParameterSymbolImpl(), name, index, type, null,
isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = IrDeclarationOrigin.DEFINED,
name = name,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false
).apply {
parent = irFunction
}
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.utils.getJsNameOrKotlinName
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
@@ -55,17 +56,18 @@ class EscapedIdentifiersLowering(context: JsIrBackendContext) : BodyLoweringPass
private val IrFunction.dummyDispatchReceiverParameter
get() = context.irFactory.createValueParameter(
startOffset, endOffset,
origin,
IrValueParameterSymbolImpl(),
SpecialNames.THIS,
-1,
context.irBuiltIns.anyType,
null,
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = SpecialNames.THIS,
type = context.irBuiltIns.anyType,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
).also { it.parent = this }
override fun visitGetValue(expression: IrGetValue): IrExpression {
@@ -549,10 +549,18 @@ private class ScriptToClassTransformer(
private fun IrDeclarationParent.createThisReceiverParameter(origin: IrDeclarationOrigin, type: IrType): IrValueParameter =
context.symbolTable.irFactory.createValueParameter(
startOffset, endOffset, origin, IrValueParameterSymbolImpl(),
SpecialNames.THIS, UNDEFINED_PARAMETER_INDEX, type,
varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = SpecialNames.THIS,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).also {
it.parent = this
}
@@ -127,8 +127,18 @@ class IrBuiltInsOverDescriptors(
val valueParameterDescriptor = operatorDescriptor.valueParameters[i]
val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor)
irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg$i"), i,
valueParameterType, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = BUILTIN_OPERATOR,
name = Name.identifier("arg$i"),
type = valueParameterType,
isAssignable = false,
symbol = valueParameterSymbol,
index = i,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false
).apply {
parent = operator
}
@@ -232,8 +242,18 @@ class IrBuiltInsOverDescriptors(
val valueParameterSymbol = IrValueParameterSymbolImpl(valueParameterDescriptor)
val valueParameter = irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR, valueParameterSymbol, Name.identifier("arg0"), 0,
valueIrType, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = BUILTIN_OPERATOR,
name = Name.identifier("arg0"),
type = valueIrType,
isAssignable = false,
symbol = valueParameterSymbol,
index = 0,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
valueParameter.parent = operator
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
@@ -279,12 +280,18 @@ class IrDescriptorBasedFunctionFactory(
private fun createThisReceiver(descriptorFactory: FunctionDescriptorFactory): IrValueParameter {
val descriptor = descriptorFactory.classReceiverParameterDescriptor()
return irFactory.createValueParameter(
offset, offset, classOrigin, IrValueParameterSymbolImpl(descriptor), SpecialNames.THIS, -1,
typeTranslator.translateType(descriptor.type), null,
startOffset = offset,
endOffset = offset,
origin = classOrigin,
name = SpecialNames.THIS,
type = typeTranslator.translateType(descriptor.type),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(descriptor),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
)
}
@@ -330,11 +337,18 @@ class IrDescriptorBasedFunctionFactory(
buildSimpleType()
}
val vDeclaration = irFactory.createValueParameter(
offset, offset, memberOrigin, vSymbol, Name.identifier("p$i"), i - 1, vType, null,
startOffset = offset,
endOffset = offset,
origin = memberOrigin,
name = Name.identifier("p$i"),
type = vType,
isAssignable = false,
symbol = vSymbol,
index = i - 1,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
)
vDeclaration.parent = fDeclaration
fDeclaration.valueParameters += vDeclaration
@@ -364,8 +378,18 @@ class IrDescriptorBasedFunctionFactory(
private fun IrFunction.createValueParameter(descriptor: ParameterDescriptor): IrValueParameter = with(descriptor) {
irFactory.createValueParameter(
offset, offset, memberOrigin, IrValueParameterSymbolImpl(this), name, indexOrMinusOne, toIrType(type),
(this as? ValueParameterDescriptor)?.varargElementType?.let(::toIrType), isCrossinline, isNoinline, false, false
startOffset = offset,
endOffset = offset,
origin = memberOrigin,
name = name,
type = toIrType(type),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(this),
index = indexOrMinusOne,
varargElementType = (this as? ValueParameterDescriptor)?.varargElementType?.let(::toIrType),
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = false
).also {
it.parent = this@createValueParameter
}
@@ -449,9 +449,18 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
fun createValueParameter(name: String, index: Int, type: IrType): IrValueParameter =
context.irFactory.createValueParameter(
startOffset, endOffset, IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION, IrValueParameterSymbolImpl(),
Name.identifier(name), index, type, varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_SUSPEND_CONVERSION,
name = Name.identifier(name),
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
irAdapterFun.extensionReceiverParameter = createValueParameter("callee", -1, funType.toIrType())
@@ -497,13 +497,18 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
private fun createAdapterParameter(startOffset: Int, endOffset: Int, name: Name, index: Int, type: KotlinType): IrValueParameter =
context.irFactory.createValueParameter(
startOffset, endOffset,
IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE,
IrValueParameterSymbolImpl(),
name,
index,
type.toIrType(),
varargElementType = null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = IrDeclarationOrigin.ADAPTER_PARAMETER_FOR_CALLABLE_REFERENCE,
name = name,
type = type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
fun generateCallableReference(
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ScriptDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
@@ -62,12 +63,18 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
type
) { symbol ->
context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
origin, symbol, context.symbolTable.nameProvider.nameForDeclaration(descriptor),
if (index != -1) index else descriptor.indexOrMinusOne,
type, varargElementType,
descriptor.isCrossinline, descriptor.isNoinline,
isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = origin,
name = context.symbolTable.nameProvider.nameForDeclaration(descriptor),
type = type,
isAssignable = false,
symbol = symbol,
index = if (index != UNDEFINED_PARAMETER_INDEX) index else descriptor.indexOrMinusOne,
varargElementType = varargElementType,
isCrossinline = descriptor.isCrossinline,
isNoinline = descriptor.isNoinline,
isHidden = false,
)
}.also { it.parent = irScript }
}
@@ -92,12 +99,18 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
fun createValueParameter(valueParameterDescriptor: ValueParameterDescriptor): IrValueParameter {
return context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.SCRIPT_CALL_PARAMETER, IrValueParameterSymbolImpl(),
valueParameterDescriptor.name, parametersIndex++,
valueParameterDescriptor.type.toIrType(), valueParameterDescriptor.varargElementType?.toIrType(),
valueParameterDescriptor.isCrossinline, valueParameterDescriptor.isNoinline,
false, false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = IrDeclarationOrigin.SCRIPT_CALL_PARAMETER,
name = valueParameterDescriptor.name,
type = valueParameterDescriptor.type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = parametersIndex++,
varargElementType = valueParameterDescriptor.varargElementType?.toIrType(),
isCrossinline = valueParameterDescriptor.isCrossinline,
isNoinline = valueParameterDescriptor.isNoinline,
isHidden = false
).also { it.parent = irScript }
}
@@ -130,9 +143,18 @@ internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : Dec
IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, parameter, type
) { symbol ->
context.irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY, symbol, descriptor.name,
parametersIndex, type, null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = IrDeclarationOrigin.SCRIPT_PROVIDED_PROPERTY,
name = descriptor.name,
type = type,
isAssignable = false,
symbol = symbol,
index = parametersIndex,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).also { it.parent = irScript }
}
parametersIndex++
@@ -291,10 +291,18 @@ fun <D> buildReceiverParameter(
): IrValueParameter
where D : IrDeclaration, D : IrDeclarationParent =
parent.factory.createValueParameter(
startOffset, endOffset, origin,
IrValueParameterSymbolImpl(),
SpecialNames.THIS, -1, type, null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = SpecialNames.THIS,
type = type,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).also {
it.parent = parent
}
@@ -302,9 +310,18 @@ fun <D> buildReceiverParameter(
fun IrFactory.buildValueParameter(builder: IrValueParameterBuilder, parent: IrDeclarationParent): IrValueParameter =
with(builder) {
return createValueParameter(
startOffset, endOffset, origin,
IrValueParameterSymbolImpl(),
name, index, type, varargElementType, isCrossInline, isNoinline, isHidden, isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
type = type,
isAssignable = isAssignable,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = varargElementType,
isCrossinline = isCrossInline,
isNoinline = isNoinline,
isHidden = isHidden
).also {
it.parent = parent
}
@@ -194,15 +194,15 @@ interface IrFactory {
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
name: Name,
index: Int,
type: IrType,
isAssignable: Boolean,
symbol: IrValueParameterSymbol,
index: Int,
varargElementType: IrType?,
isCrossinline: Boolean,
isNoinline: Boolean,
isHidden: Boolean,
isAssignable: Boolean
isHidden: Boolean
): IrValueParameter
// Bodies
@@ -236,15 +236,15 @@ abstract class AbstractIrFactoryImpl : IrFactory {
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
name: Name,
index: Int,
type: IrType,
isAssignable: Boolean,
symbol: IrValueParameterSymbol,
index: Int,
varargElementType: IrType?,
isCrossinline: Boolean,
isNoinline: Boolean,
isHidden: Boolean,
isAssignable: Boolean,
): IrValueParameter =
IrValueParameterImpl(
startOffset, endOffset, origin, symbol, name, index, type, varargElementType,
@@ -368,29 +368,29 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
symbol: IrValueParameterSymbol,
name: Name,
index: Int,
type: IrType,
isAssignable: Boolean,
symbol: IrValueParameterSymbol,
index: Int,
varargElementType: IrType?,
isCrossinline: Boolean,
isNoinline: Boolean,
isHidden: Boolean,
isAssignable: Boolean
isHidden: Boolean
): IrValueParameter {
return super.createValueParameter(
startOffset,
endOffset,
origin,
symbol,
name,
index,
type,
isAssignable,
symbol,
index,
varargElementType,
isCrossinline,
isNoinline,
isHidden,
isAssignable,
).register()
}
}
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
@@ -30,9 +31,18 @@ interface IrLazyDeclarationBase : IrDeclaration {
fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
factory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = origin,
name = name,
type = type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(this),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
)
fun createLazyAnnotations(): ReadWriteProperty<Any?, List<IrConstructorCall>> = lazyVar(stubGenerator.lock) {
@@ -43,9 +43,18 @@ interface IrLazyFunctionBase : IrLazyDeclarationBase, IrTypeParametersContainer
val result = arrayListOf<IrValueParameter>()
descriptor.contextReceiverParameters.mapIndexedTo(result) { i, contextReceiverParameter ->
factory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(contextReceiverParameter),
Name.identifier("contextReceiverParameter$i"), i, contextReceiverParameter.type.toIrType(),
null, isCrossinline = false, isNoinline = false, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = origin,
name = Name.identifier("contextReceiverParameter$i"),
type = contextReceiverParameter.type.toIrType(),
isAssignable = false,
symbol = IrValueParameterSymbolImpl(contextReceiverParameter),
index = i,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
).apply { parent = this@IrLazyFunctionBase }
}
descriptor.valueParameters.mapTo(result) {
@@ -91,17 +91,18 @@ class FakeOverrideCopier(
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
declaration.factory.createValueParameter(
declaration.startOffset, declaration.endOffset,
mapDeclarationOrigin(declaration.origin),
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
symbolRenamer.getValueParameterName(declaration.symbol),
declaration.index,
declaration.type.remapType(),
declaration.varargElementType?.remapType(),
declaration.isCrossinline,
declaration.isNoinline,
declaration.isHidden,
declaration.isAssignable
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getValueParameterName(declaration.symbol),
type = declaration.type.remapType(),
isAssignable = declaration.isAssignable,
symbol = symbolRemapper.getDeclaredValueParameter(declaration.symbol),
index = declaration.index,
varargElementType = declaration.varargElementType?.remapType(),
isCrossinline = declaration.isCrossinline,
isNoinline = declaration.isNoinline,
isHidden = declaration.isHidden,
).apply {
transformAnnotations(declaration)
// Don't set the default value for fake overrides.
@@ -373,17 +373,18 @@ open class DeepCopyIrTreeWithSymbols(
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
declaration.factory.createValueParameter(
declaration.startOffset, declaration.endOffset,
mapDeclarationOrigin(declaration.origin),
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
symbolRenamer.getValueParameterName(declaration.symbol),
declaration.index,
declaration.type.remapType(),
declaration.varargElementType?.remapType(),
declaration.isCrossinline,
declaration.isNoinline,
declaration.isHidden,
declaration.isAssignable
startOffset = declaration.startOffset,
endOffset = declaration.endOffset,
origin = mapDeclarationOrigin(declaration.origin),
name = symbolRenamer.getValueParameterName(declaration.symbol),
type = declaration.type.remapType(),
isAssignable = declaration.isAssignable,
symbol = symbolRemapper.getDeclaredValueParameter(declaration.symbol),
index = declaration.index,
varargElementType = declaration.varargElementType?.remapType(),
isCrossinline = declaration.isCrossinline,
isNoinline = declaration.isNoinline,
isHidden = declaration.isHidden,
).apply {
transformAnnotations(declaration)
defaultValue = declaration.defaultValue?.transform()
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.*
import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.builders.declarations.buildReceiverParameter
import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
import org.jetbrains.kotlin.ir.builders.declarations.*
import org.jetbrains.kotlin.ir.builders.irImplicitCast
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
@@ -799,9 +796,18 @@ fun IrValueParameter.copyTo(
}
}
return factory.createValueParameter(
startOffset, endOffset, origin, symbol,
name, index, type, varargElementType, isCrossinline = isCrossinline,
isNoinline = isNoinline, isHidden = false, isAssignable = isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
type = type,
isAssignable = isAssignable,
symbol = symbol,
index = index,
varargElementType = varargElementType,
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = false,
).also {
it.parent = irFunction
it.defaultValue = defaultValueCopy
@@ -823,13 +829,18 @@ fun IrTypeParameter.copyToWithoutSuperTypes(
fun IrFunction.copyReceiverParametersFrom(from: IrFunction, substitutionMap: Map<IrTypeParameterSymbol, IrType>) {
dispatchReceiverParameter = from.dispatchReceiverParameter?.run {
factory.createValueParameter(
startOffset, endOffset, origin,
IrValueParameterSymbolImpl(),
name, index,
type.substitute(substitutionMap),
varargElementType?.substitute(substitutionMap),
isCrossinline, isNoinline,
isHidden, isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name,
type = type.substitute(substitutionMap),
isAssignable = isAssignable,
symbol = IrValueParameterSymbolImpl(),
index = index,
varargElementType = varargElementType?.substitute(substitutionMap),
isCrossinline = isCrossinline,
isNoinline = isNoinline,
isHidden = isHidden,
).also { parameter ->
parameter.parent = this@copyReceiverParametersFrom
}
@@ -1098,17 +1109,18 @@ fun IrFunction.createDispatchReceiverParameter(origin: IrDeclarationOrigin? = nu
assert(dispatchReceiverParameter == null)
dispatchReceiverParameter = factory.createValueParameter(
startOffset, endOffset,
origin ?: parentAsClass.origin,
IrValueParameterSymbolImpl(),
SpecialNames.THIS,
-1,
parentAsClass.defaultType,
null,
startOffset = startOffset,
endOffset = endOffset,
origin = origin ?: parentAsClass.origin,
name = SpecialNames.THIS,
type = parentAsClass.defaultType,
isAssignable = false,
symbol = IrValueParameterSymbolImpl(),
index = UNDEFINED_PARAMETER_INDEX,
varargElementType = null,
isCrossinline = false,
isNoinline = false,
isHidden = false,
isAssignable = false
).apply {
parent = this@createDispatchReceiverParameter
}
@@ -1065,9 +1065,18 @@ open class SymbolTable(
isAssignable: Boolean = false,
valueParameterFactory: (IrValueParameterSymbol) -> IrValueParameter = {
irFactory.createValueParameter(
startOffset, endOffset, origin, it, name ?: nameProvider.nameForDeclaration(descriptor),
index ?: descriptor.indexOrMinusOne, type, varargElementType, descriptor.isCrossinline, descriptor.isNoinline,
isHidden = false, isAssignable = isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = name ?: nameProvider.nameForDeclaration(descriptor),
type = type,
isAssignable = isAssignable,
symbol = it,
index = index ?: descriptor.indexOrMinusOne,
varargElementType = varargElementType,
isCrossinline = descriptor.isCrossinline,
isNoinline = descriptor.isNoinline,
isHidden = false,
)
}
): IrValueParameter =
@@ -329,16 +329,18 @@ class IrDeclarationDeserializer(
val flags = ValueParameterFlags.decode(fcode)
val nameAndType = BinaryNameAndType.decode(proto.nameType)
irFactory.createValueParameter(
startOffset, endOffset, origin,
symbol.checkSymbolType(fallbackSymbolKind = null),
deserializeName(nameAndType.nameIndex),
index,
deserializeIrType(nameAndType.typeIndex),
if (proto.hasVarargElementType()) deserializeIrType(proto.varargElementType) else null,
flags.isCrossInline,
flags.isNoInline,
flags.isHidden,
flags.isAssignable
startOffset = startOffset,
endOffset = endOffset,
origin = origin,
name = deserializeName(nameAndType.nameIndex),
type = deserializeIrType(nameAndType.typeIndex),
isAssignable = flags.isAssignable,
symbol = symbol.checkSymbolType(fallbackSymbolKind = null),
index = index,
varargElementType = if (proto.hasVarargElementType()) deserializeIrType(proto.varargElementType) else null,
isCrossinline = flags.isCrossInline,
isNoinline = flags.isNoInline,
isHidden = flags.isHidden,
).apply {
if (proto.hasDefaultValue())
defaultValue = deserializeExpressionBody(proto.defaultValue)
@@ -361,9 +361,18 @@ private fun TranslationPluginContext.declareParameterStub(parameterDescriptor: P
val type = typeTranslator.translateType(parameterDescriptor.type)
val varargElementType = parameterDescriptor.varargElementType?.let { typeTranslator.translateType(it) }
return irFactory.createValueParameter(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.DEFINED, symbol, parameterDescriptor.name,
parameterDescriptor.indexOrMinusOne, type, varargElementType, parameterDescriptor.isCrossinline,
parameterDescriptor.isNoinline, isHidden = false, isAssignable = false
startOffset = UNDEFINED_OFFSET,
endOffset = UNDEFINED_OFFSET,
origin = IrDeclarationOrigin.DEFINED,
name = parameterDescriptor.name,
type = type,
isAssignable = false,
symbol = symbol,
index = parameterDescriptor.indexOrMinusOne,
varargElementType = varargElementType,
isCrossinline = parameterDescriptor.isCrossinline,
isNoinline = parameterDescriptor.isNoinline,
isHidden = false,
)
}