[klib] Don't pass around metadata serialization closure

Pass the metadata serializer instance instead. This allows to further
reduce code duplication by introducing the common interface
`KlibSingleFileMetadataSerializer` for abstracting away K1 and K2
representation of a source file, as well as reusing
`Fir2KlibMetadataSerializer` across different backends.

KT-64392
This commit is contained in:
Sergej Jaskiewicz
2024-01-22 14:21:20 +01:00
committed by Space Team
parent 5a6f51e474
commit f39335b3f7
23 changed files with 388 additions and 406 deletions
@@ -12,7 +12,6 @@ import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.ir.KtDiagnosticReporterWithImplicitIrBasedContext
import org.jetbrains.kotlin.KtPsiSourceFile
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.backend.common.linkage.issues.checkNoUnboundSymbols
import org.jetbrains.kotlin.backend.common.linkage.partial.PartialLinkageSupportForLinker
@@ -485,7 +484,6 @@ class GenerateIrRuntime {
return psi2IrTranslator.generateModuleFragment(psi2IrContext, files, irProviders, emptyList())
}
@OptIn(ExperimentalPathApi::class)
private fun doSerializeModule(
moduleFragment: IrModuleFragment,
bindingContext: BindingContext,
@@ -494,12 +492,19 @@ class GenerateIrRuntime {
): String {
val diagnosticReporter = DiagnosticReporterFactory.createPendingReporter()
val tmpKlibDir = createTempDirectory().also { it.toFile().deleteOnExit() }.toString()
val metadataSerializer = KlibMetadataIncrementalSerializer(configuration, project, false)
val metadataSerializer = KlibMetadataIncrementalSerializer(
files,
configuration,
project,
bindingContext,
moduleFragment.descriptor,
allowErrorTypes = false,
)
serializeModuleIntoKlib(
moduleName,
configuration,
diagnosticReporter,
files.map(::KtPsiSourceFile),
metadataSerializer,
tmpKlibDir,
emptyList(),
moduleFragment,
@@ -507,10 +512,8 @@ class GenerateIrRuntime {
true,
perFile,
abiVersion = KotlinAbiVersion.CURRENT,
jsOutputName = null
) { file ->
metadataSerializer.serializeScope(file, bindingContext, moduleFragment.descriptor)
}
jsOutputName = null,
)
return tmpKlibDir
}