From fe9ce45e1d64514e6dc67974de614a85706831f0 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Fri, 14 Sep 2018 20:23:17 +0300 Subject: [PATCH] Add initialization of constantValueGenerator for correct work Exception was thrown from serialization plugin after compiler refactoring --- .../serialization/compiler/backend/ir/GeneratorHelpers.kt | 5 +++++ .../compiler/backend/ir/SerializableCompanionIrGenerator.kt | 3 ++- .../compiler/backend/ir/SerializableIrGenerator.kt | 3 ++- .../compiler/backend/ir/SerializerIrGenerator.kt | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt index f7236046be9..cef9628154f 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt @@ -29,6 +29,11 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializableProperty val BackendContext.externalSymbols: ReferenceSymbolTable get() = ir.symbols.externalSymbolTable +internal fun BackendContext.createTypeTranslator(moduleDescriptor: ModuleDescriptor): TypeTranslator = + TypeTranslator(externalSymbols, irBuiltIns.languageVersionSettings).apply { + constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable = externalSymbols) + } + interface IrBuilderExtension { val compilerContext: BackendContext val translator: TypeTranslator diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt index b48bf9d028d..fe1f59e755b 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializableCompanionCodegen import org.jetbrains.kotlinx.serialization.compiler.resolve.classSerializer import org.jetbrains.kotlinx.serialization.compiler.resolve.getSerializableClassDescriptorByCompanion @@ -20,7 +21,7 @@ class SerializableCompanionIrGenerator( override val compilerContext: BackendContext, bindingContext: BindingContext ) : SerializableCompanionCodegen(irClass.descriptor), IrBuilderExtension { - override val translator: TypeTranslator = TypeTranslator(compilerContext.externalSymbols, compilerContext.irBuiltIns.languageVersionSettings) + override val translator: TypeTranslator = compilerContext.createTypeTranslator(serializableDescriptor.module) private val _table = SymbolTable() override val BackendContext.localSymbolTable: SymbolTable get() = _table diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt index 394dfda49a8..13b5f96d389 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.util.constructors import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializableCodegen import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.MISSING_FIELD_EXC @@ -30,7 +31,7 @@ class SerializableIrGenerator( override val compilerContext: BackendContext, bindingContext: BindingContext ) : SerializableCodegen(irClass.descriptor, bindingContext), IrBuilderExtension { - override val translator: TypeTranslator = TypeTranslator(compilerContext.externalSymbols, compilerContext.irBuiltIns.languageVersionSettings) + override val translator: TypeTranslator = compilerContext.createTypeTranslator(serializableDescriptor.module) private val _table = SymbolTable() override val BackendContext.localSymbolTable: SymbolTable get() = _table diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt index e050a2ccd3e..6cbaf883be7 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.classId +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen @@ -46,7 +47,7 @@ object SERIALIZABLE_PLUGIN_ORIGIN : IrDeclarationOriginImpl("SERIALIZER") class SerializerIrGenerator(val irClass: IrClass, override val compilerContext: BackendContext, bindingContext: BindingContext) : SerializerCodegen(irClass.descriptor, bindingContext), IrBuilderExtension { - override val translator: TypeTranslator = TypeTranslator(compilerContext.externalSymbols, compilerContext.irBuiltIns.languageVersionSettings) + override val translator: TypeTranslator = compilerContext.createTypeTranslator(serializableDescriptor.module) private val _table = SymbolTable() override val BackendContext.localSymbolTable: SymbolTable get() = _table