[FE, IR] Support deserialization

This commit is contained in:
Anastasiya Shadrina
2021-10-29 05:53:47 +07:00
committed by TeamCityServer
parent 2fbfee3e11
commit 617af898b0
8 changed files with 118 additions and 6 deletions
@@ -8,11 +8,13 @@ package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.IrType
import kotlin.properties.ReadWriteProperty
import org.jetbrains.kotlin.name.Name
interface IrLazyFunctionBase : IrLazyDeclarationBase, IrTypeParametersContainer {
@OptIn(ObsoleteDescriptorBasedAPI::class)
@@ -28,8 +30,17 @@ interface IrLazyFunctionBase : IrLazyDeclarationBase, IrTypeParametersContainer
fun createValueParameters(): List<IrValueParameter> =
typeTranslator.buildWithScope(this) {
descriptor.valueParameters.mapTo(arrayListOf()) {
stubGenerator.generateValueParameterStub(it).apply { parent = this@IrLazyFunctionBase }
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
).apply { parent = this@IrLazyFunctionBase }
}
descriptor.valueParameters.mapTo(result) {
stubGenerator.generateValueParameterStub(it, it.index + descriptor.contextReceiverParameters.size)
.apply { parent = this@IrLazyFunctionBase }
}
}
@@ -234,7 +234,7 @@ abstract class DeclarationStubGenerator(
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
internal fun generateValueParameterStub(descriptor: ValueParameterDescriptor): IrValueParameter = with(descriptor) {
internal fun generateValueParameterStub(descriptor: ValueParameterDescriptor, index: Int): IrValueParameter = with(descriptor) {
IrLazyValueParameter(UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(this), IrValueParameterSymbolImpl(this), this, name, index,
type.toIrType(), varargElementType?.toIrType(), isCrossinline, isNoinline, isHidden = false, isAssignable = false, this@DeclarationStubGenerator, typeTranslator)
.also { irValueParameter ->