From 9fcdc1001953d9d26b29aa91d3cd186f73540c9a Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Wed, 14 Jun 2023 14:32:58 +0200 Subject: [PATCH] [IR] Reorder parameters in IrFactory#createValueParameter This is to prepare for IrFactory auto-generation (KT-59308). --- .../kotlin/fir/backend/ConversionUtils.kt | 16 ++++-- .../fir/backend/Fir2IrDeclarationStorage.kt | 52 ++++++++++++----- .../backend/generators/AdapterGenerator.kt | 18 +++--- .../generators/DataClassMembersGenerator.kt | 14 ++++- .../js/lower/EscapedIdentifiersLowering.kt | 18 +++--- .../backend/jvm/lower/ScriptLowering.kt | 16 ++++-- .../descriptors/IrBuiltInsOverDescriptors.kt | 28 ++++++++-- .../IrDescriptorBasedFunctionFactory.kt | 38 ++++++++++--- .../generators/ArgumentsGenerationUtils.kt | 15 ++++- .../ReflectionReferencesGenerator.kt | 19 ++++--- .../psi2ir/generators/ScriptGenerator.kt | 52 ++++++++++++----- .../declarations/declarationBuilders.kt | 31 +++++++--- .../kotlin/ir/declarations/IrFactory.kt | 8 +-- .../ir/declarations/impl/IrFactoryImpl.kt | 6 +- .../declarations/impl/IrFactoryImplForJsIC.kt | 14 ++--- .../lazy/IrLazyDeclarationBase.kt | 16 +++++- .../declarations/lazy/IrLazyFunctionBase.kt | 15 ++++- .../kotlin/ir/overrides/FakeOverrideCopier.kt | 23 ++++---- .../ir/util/DeepCopyIrTreeWithSymbols.kt | 23 ++++---- .../org/jetbrains/kotlin/ir/util/IrUtils.kt | 56 +++++++++++-------- .../jetbrains/kotlin/ir/util/SymbolTable.kt | 15 ++++- .../IrDeclarationDeserializer.kt | 22 ++++---- .../synthetic/codegen/AndroidIrExtension.kt | 15 ++++- 23 files changed, 365 insertions(+), 165 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 5b606c81d18..4a9ccdae47d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -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) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 1f6153efa5d..a88ae34c7e0 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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, ) } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt index a70167c90cf..b87642d2a1b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt @@ -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 } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index a27fe5ed35f..c0d7418bdff 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -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 } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EscapedIdentifiersLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EscapedIdentifiersLowering.kt index 6a724c6e2c1..4fdb2b03524 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EscapedIdentifiersLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EscapedIdentifiersLowering.kt @@ -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 { 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 d8b85b1b2eb..180f2eb9e77 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 @@ -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 } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt index 18482b38e98..ef4511cd3a2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt @@ -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 diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt index e4cdc2cb5da..f325b7b9edc 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt @@ -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 } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt index f97ccc5b6f0..e3b9a7534f3 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt @@ -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()) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt index ee868c20c7e..7474cf56dc2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt @@ -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( diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt index 54e27ea8b82..1e59fc8e3be 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt @@ -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++ diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index ae1eb10abc8..c0fd110c634 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -291,10 +291,18 @@ fun 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 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 } 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 c384dc89223..a9b6f631dbc 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 @@ -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 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 15831c4e905..e364f78e309 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 @@ -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, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt index 0f1cdf2bad4..796ad9703c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt @@ -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() } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt index 509afacd40e..e7191b94a6c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt @@ -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> = lazyVar(stubGenerator.lock) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt index 6180bb8d39d..3e8d76b8f02 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyFunctionBase.kt @@ -43,9 +43,18 @@ interface IrLazyFunctionBase : IrLazyDeclarationBase, IrTypeParametersContainer val result = arrayListOf() 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) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt index dce5fe21648..65ade07fae4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/FakeOverrideCopier.kt @@ -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. diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index daa22c321f7..92020a43e25 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -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() 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 cf65308e869..c8a51e1f1cf 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 @@ -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) { 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 } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index 7556e8bc1ac..9c748b33e32 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -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 = diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt index 6ef3796651c..f425605b0a2 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt @@ -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) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt index 7c726892603..f75c161ab2c 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt @@ -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, ) }