[IR][Native] Decouple CacheDeserializationStrategy from KonanIrLinker

^KT-73754 Fixed
diff --git a/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/CacheDeserializationStrategyBase.kt b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/CacheDeserializationStrategyBase.kt
new file mode 100644
index 0000000..056366c
--- /dev/null
+++ b/compiler/ir/serialization.native/src/org/jetbrains/kotlin/backend/konan/CacheDeserializationStrategyBase.kt
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2010-2024 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.konan
+
+import org.jetbrains.kotlin.library.KotlinLibrary
+import org.jetbrains.kotlin.name.FqName
+
+class PartialCacheInfo(val klib: KotlinLibrary, val strategy: CacheDeserializationStrategyBase)
+
+abstract class CacheDeserializationStrategyBase {
+    abstract fun contains(filePath: String): Boolean
+    abstract fun contains(fqName: FqName, fileName: String): Boolean
+}
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheDeserializationStrategy.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheDeserializationStrategy.kt
new file mode 100644
index 0000000..712b685
--- /dev/null
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheDeserializationStrategy.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2010-2024 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.konan
+
+import org.jetbrains.kotlin.konan.file.File
+import org.jetbrains.kotlin.name.FqName
+
+object CacheDeserializationStrategy {
+    object Nothing : CacheDeserializationStrategyBase() {
+        override fun contains(filePath: String) = false
+        override fun contains(fqName: FqName, fileName: String) = false
+    }
+
+    object WholeModule : CacheDeserializationStrategyBase() {
+        override fun contains(filePath: String) = true
+        override fun contains(fqName: FqName, fileName: String) = true
+    }
+
+    class SingleFile(val filePath: String, val fqName: String) : CacheDeserializationStrategyBase() {
+        override fun contains(filePath: String) = filePath == this.filePath
+
+        override fun contains(fqName: FqName, fileName: String) =
+                fqName.asString() == this.fqName && File(filePath).name == fileName
+    }
+
+    class MultipleFiles(filePaths: List<String>, fqNames: List<String>) : CacheDeserializationStrategyBase() {
+        private val filePaths = filePaths.toSet()
+
+        private val fqNamesWithNames = fqNames.mapIndexed { i: Int, fqName: String -> Pair(fqName, File(filePaths[i]).name) }.toSet()
+
+        override fun contains(filePath: String) = filePath in filePaths
+
+        override fun contains(fqName: FqName, fileName: String) = Pair(fqName.asString(), fileName) in fqNamesWithNames
+    }
+}
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheSupport.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheSupport.kt
index 2fa0886..a64d56f 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheSupport.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CacheSupport.kt
@@ -44,40 +44,6 @@
     }
 }
 
-sealed class CacheDeserializationStrategy {
-    abstract fun contains(filePath: String): Boolean
-    abstract fun contains(fqName: FqName, fileName: String): Boolean
-
-    object Nothing : CacheDeserializationStrategy() {
-        override fun contains(filePath: String) = false
-        override fun contains(fqName: FqName, fileName: String) = false
-    }
-
-    object WholeModule : CacheDeserializationStrategy() {
-        override fun contains(filePath: String) = true
-        override fun contains(fqName: FqName, fileName: String) = true
-    }
-
-    class SingleFile(val filePath: String, val fqName: String) : CacheDeserializationStrategy() {
-        override fun contains(filePath: String) = filePath == this.filePath
-
-        override fun contains(fqName: FqName, fileName: String) =
-                fqName.asString() == this.fqName && File(filePath).name == fileName
-    }
-
-    class MultipleFiles(filePaths: List<String>, fqNames: List<String>) : CacheDeserializationStrategy() {
-        private val filePaths = filePaths.toSet()
-
-        private val fqNamesWithNames = fqNames.mapIndexed { i: Int, fqName: String -> Pair(fqName, File(filePaths[i]).name) }.toSet()
-
-        override fun contains(filePath: String) = filePath in filePaths
-
-        override fun contains(fqName: FqName, fileName: String) = Pair(fqName.asString(), fileName) in fqNamesWithNames
-    }
-}
-
-class PartialCacheInfo(val klib: KotlinLibrary, val strategy: CacheDeserializationStrategy)
-
 class CacheSupport(
         private val configuration: CompilerConfiguration,
         private val resolvedLibraries: KotlinLibraryResolveResult,
@@ -109,7 +75,7 @@
         incrementalCacheDirectory?.let { add(it) }
     }
 
-    internal fun tryGetImplicitOutput(cacheDeserializationStrategy: CacheDeserializationStrategy?): String? {
+    internal fun tryGetImplicitOutput(cacheDeserializationStrategy: CacheDeserializationStrategyBase?): String? {
         val libraryToCache = libraryToCache ?: return null
         // Put the resulting library in the first cache directory.
         val cacheDirectory = implicitCacheDirectories.firstOrNull() ?: return null
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt
index b00ec54..666e3eb 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/CompilerOutput.kt
@@ -38,7 +38,7 @@
 val CompilerOutputKind.involvesBitcodeGeneration: Boolean
     get() = this != CompilerOutputKind.LIBRARY
 
-internal val CacheDeserializationStrategy?.containsKFunctionImpl: Boolean
+internal val CacheDeserializationStrategyBase?.containsKFunctionImpl: Boolean
     get() = this?.contains(KonanFqNames.internalPackageName, "KFunctionImpl.kt") != false
 
 internal val NativeGenerationState.shouldDefineFunctionClasses: Boolean
@@ -48,7 +48,7 @@
     get() = producedLlvmModuleContainsStdlib &&
             cacheDeserializationStrategy?.contains(KonanFqNames.internalPackageName, "Boxing.kt") != false
 
-internal val CacheDeserializationStrategy?.containsRuntime: Boolean
+internal val CacheDeserializationStrategyBase?.containsRuntime: Boolean
     get() = this?.contains(KonanFqNames.internalPackageName, "Runtime.kt") != false
 
 internal val NativeGenerationState.shouldLinkRuntimeNativeLibraries: Boolean
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt
index e39237075..0786e20 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt
@@ -53,7 +53,7 @@
         // TODO: Get rid of this property completely once transition to the dynamic driver is complete.
         //  It will reduce code coupling and make it easier to create NativeGenerationState instances.
         val context: Context,
-        val cacheDeserializationStrategy: CacheDeserializationStrategy?,
+        val cacheDeserializationStrategy: CacheDeserializationStrategyBase?,
         val dependenciesTracker: DependenciesTracker,
         val llvmModuleSpecification: LlvmModuleSpecification,
         val outputFiles: OutputFiles,
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt
index 9af2198..edf8b6e 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/TopLevelPhases.kt
@@ -278,7 +278,7 @@
 
 private data class BackendJobFragment(
         val irModule: IrModuleFragment,
-        val cacheDeserializationStrategy: CacheDeserializationStrategy?,
+        val cacheDeserializationStrategy: CacheDeserializationStrategyBase?,
         val dependenciesTracker: DependenciesTracker,
         val llvmModuleSpecification: LlvmModuleSpecification,
         val performanceManager: CommonCompilerPerformanceManager?,
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/FileManagement.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/FileManagement.kt
index 2a2d18b..9f8a258 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/FileManagement.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/FileManagement.kt
@@ -6,13 +6,14 @@
 package org.jetbrains.kotlin.backend.konan.driver.utilities
 
 import org.jetbrains.kotlin.backend.konan.CacheDeserializationStrategy
+import org.jetbrains.kotlin.backend.konan.CacheDeserializationStrategyBase
 import org.jetbrains.kotlin.backend.konan.CacheSupport
 import org.jetbrains.kotlin.backend.konan.KonanConfig
 import org.jetbrains.kotlin.backend.konan.KonanConfigKeys
 import org.jetbrains.kotlin.konan.TempFiles
 import java.io.File
 
-internal fun createTempFiles(config: KonanConfig, cacheDeserializationStrategy: CacheDeserializationStrategy?): TempFiles {
+internal fun createTempFiles(config: KonanConfig, cacheDeserializationStrategy: CacheDeserializationStrategyBase?): TempFiles {
     val pathToTempDir = config.configuration.get(KonanConfigKeys.TEMPORARY_FILES_DIR)?.let {
         val singleFileStrategy = cacheDeserializationStrategy as? CacheDeserializationStrategy.SingleFile
         if (singleFileStrategy == null)
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt
index e583ea8..30fe9be 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanPartialModuleDeserializer.kt
@@ -42,7 +42,7 @@
         private val cachedLibraries: CachedLibraries,
         private val inlineFunctionFiles: MutableMap<IrExternalPackageFragment, IrFile>,
         strategyResolver: (String) -> DeserializationStrategy,
-        private val cacheDeserializationStrategy: CacheDeserializationStrategy,
+        private val cacheDeserializationStrategy: CacheDeserializationStrategyBase,
         containsErrorCode: Boolean = false
 ) : BasicIrModuleDeserializer(konanIrLinker, moduleDescriptor, klib,
         { fileName ->