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