diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index dff750a2382..1d29e9e8ef5 100644 --- a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -179,8 +179,11 @@ open class JvmIrCodegenFactory( fun doGenerateFilesInternal(input: JvmIrBackendInput) { val (state, irModuleFragment, symbolTable, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) = input + val irSerializer = if (state.configuration.getBoolean(JVMConfigurationKeys.SERIALIZE_IR)) + JvmIrSerializerImpl(state.configuration) + else null val context = JvmBackendContext( - state, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension, + state, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension, irSerializer, notifyCodegenStart ) /* JvmBackendContext creates new unbound symbols, have to resolve them. */ diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrSerializerImpl.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrSerializerImpl.kt new file mode 100644 index 00000000000..607afb0d685 --- /dev/null +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrSerializerImpl.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.backend.jvm + +import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable +import org.jetbrains.kotlin.backend.jvm.serialization.JvmGlobalDeclarationTable +import org.jetbrains.kotlin.backend.jvm.serialization.JvmIrSerializerSession +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.util.IrMessageLogger + +class JvmIrSerializerImpl(private val configuration: CompilerConfiguration) : JvmIrSerializer { + + private val declarationTable = DeclarationTable(JvmGlobalDeclarationTable()) + + override fun serializeIrFile(irFile: IrFile): ByteArray { + return makeSerializerSession().serializeJvmIrFile(irFile).toByteArray() + } + + override fun serializeTopLevelIrClass(irClass: IrClass): ByteArray { + assert(irClass.parent is IrFile) + return makeSerializerSession().serializeTopLevelClass(irClass).toByteArray() + } + + private fun makeSerializerSession() = + JvmIrSerializerSession( + configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None, + declarationTable, + mutableMapOf(), + ) +} \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt index 834d93bf3a9..b72c23df165 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.common.Mapping import org.jetbrains.kotlin.backend.common.ir.Ir import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.psi.PsiErrorBuilder -import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable import org.jetbrains.kotlin.backend.jvm.codegen.* import org.jetbrains.kotlin.backend.jvm.descriptors.JvmSharedVariablesManager import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods @@ -20,7 +19,6 @@ import org.jetbrains.kotlin.backend.jvm.lower.CollectionStubComputer import org.jetbrains.kotlin.backend.jvm.lower.JvmInnerClassesSupport import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.MemoizedInlineClassReplacements -import org.jetbrains.kotlin.backend.jvm.serialization.JvmGlobalDeclarationTable import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor @@ -50,6 +48,7 @@ class JvmBackendContext( val phaseConfig: PhaseConfig, val generatorExtensions: JvmGeneratorExtensions, val backendExtension: JvmBackendExtension, + val irSerializer: JvmIrSerializer?, val notifyCodegenStart: () -> Unit, ) : CommonBackendContext { // If the JVM fqname of a class differs from what is implied by its parent, e.g. if it's a file class @@ -225,6 +224,4 @@ class JvmBackendContext( override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true } - - val declarationTable = DeclarationTable(JvmGlobalDeclarationTable()) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrSerializer.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrSerializer.kt new file mode 100644 index 00000000000..dcc2bf5b555 --- /dev/null +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrSerializer.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.backend.jvm + +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrFile + +interface JvmIrSerializer { + fun serializeTopLevelIrClass(irClass: IrClass): ByteArray + fun serializeIrFile(irFile: IrFile): ByteArray +} \ No newline at end of file diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SerializeIrPhase.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SerializeIrPhase.kt index 0d151423ad6..27ee84fb93e 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SerializeIrPhase.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SerializeIrPhase.kt @@ -10,9 +10,6 @@ import org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.phaser.makeCustomPhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.expectDeclarationsRemovingPhase -import org.jetbrains.kotlin.backend.jvm.serializeIrFile -import org.jetbrains.kotlin.backend.jvm.serializeTopLevelIrClass -import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment @@ -27,11 +24,11 @@ internal val serializeIrPhase = makeCustomPhase + (irFile.metadata as? MetadataSource.File)?.serializedIr = irSerializer.serializeIrFile(irFile) for (irClass in irFile.declarations.filterIsInstance()) { - (irClass.metadata as? MetadataSource.Class)?.serializedIr = serializeTopLevelIrClass(context, irClass) + (irClass.metadata as? MetadataSource.Class)?.serializedIr = irSerializer.serializeTopLevelIrClass(irClass) } } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization.kt deleted file mode 100644 index 7c9a60a3a2d..00000000000 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.backend.jvm - -import org.jetbrains.kotlin.backend.jvm.serialization.JvmIrSerializer -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.util.IrMessageLogger - -fun serializeIrFile(context: JvmBackendContext, irFile: IrFile): ByteArray { - return makeSerializer(context).serializeJvmIrFile(irFile).toByteArray() -} - -fun serializeTopLevelIrClass(context: JvmBackendContext, irClass: IrClass): ByteArray { - assert(irClass.parent is IrFile) - return makeSerializer(context).serializeTopLevelClass(irClass).toByteArray() -} - -private fun makeSerializer(context: JvmBackendContext) = - JvmIrSerializer( - context.configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None, - context.declarationTable, - mutableMapOf(), - ) \ No newline at end of file diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializer.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt similarity index 98% rename from compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializer.kt rename to compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt index 239a3a9185f..fd96f836d80 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializer.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.ir.util.IrMessageLogger import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.protobuf.ByteString -class JvmIrSerializer( +class JvmIrSerializerSession( messageLogger: IrMessageLogger, declarationTable: DeclarationTable, expectDescriptorToSymbol: MutableMap,