From 208c06516b898918ae179610f237a3c9246780d5 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Thu, 13 Feb 2020 16:40:57 +0700 Subject: [PATCH] [IR][Serialization] Allow backends to skip files This change is required for Native interop libraries. For enums and structs we generate full-blown IR classes that should not be serialized because they will be generated anew. --- .../common/serialization/IrModuleSerializer.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt index 972fd053bf9..a95fced8663 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt @@ -15,12 +15,24 @@ import org.jetbrains.kotlin.library.SerializedIrModule abstract class IrModuleSerializer(protected val logger: LoggingContext) { abstract fun createSerializerForFile(file: IrFile): F + /** + * Allows to skip [file] during serialization. + * + * For example, some files should be generated anew instead of deserialization. + */ + protected open fun backendSpecificFileFilter(file: IrFile): Boolean = + true + private fun serializeIrFile(file: IrFile): SerializedIrFile { val fileSerializer = createSerializerForFile(file) return fileSerializer.serializeIrFile(file) } fun serializedIrModule(module: IrModuleFragment): SerializedIrModule { - return SerializedIrModule(module.files.filter { it.packageFragmentDescriptor !is FunctionInterfacePackageFragment }.map { serializeIrFile(it) }) + val serializedFiles = module.files + .filter { it.packageFragmentDescriptor !is FunctionInterfacePackageFragment } + .filter(this::backendSpecificFileFilter) + .map(this::serializeIrFile) + return SerializedIrModule(serializedFiles) } } \ No newline at end of file