[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:
committed by
Space Team
parent
5a6f51e474
commit
f39335b3f7
@@ -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
|
||||
}
|
||||
|
||||
@@ -106,10 +106,6 @@ abstract class IrAbstractInvalidationTest(
|
||||
) {
|
||||
sourceModule.getModuleDescriptor(it)
|
||||
}
|
||||
val metadataSerializer =
|
||||
KlibMetadataIncrementalSerializer(configuration, sourceModule.project, sourceModule.jsFrontEndResult.hasErrors)
|
||||
|
||||
val diagnosticReporter = DiagnosticReporterFactory.createPendingReporter()
|
||||
generateKLib(
|
||||
sourceModule,
|
||||
outputKlibFile.canonicalPath,
|
||||
@@ -117,9 +113,7 @@ abstract class IrAbstractInvalidationTest(
|
||||
jsOutputName = moduleName,
|
||||
icData = icData,
|
||||
moduleFragment = moduleFragment,
|
||||
diagnosticReporter = diagnosticReporter
|
||||
) { file ->
|
||||
metadataSerializer.serializeScope(file, sourceModule.jsFrontEndResult.bindingContext, moduleFragment.descriptor)
|
||||
}
|
||||
diagnosticReporter = DiagnosticReporterFactory.createPendingReporter(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ class FirJsKlibBackendFacade(
|
||||
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
||||
configuration,
|
||||
inputArtifact.diagnosticReporter,
|
||||
inputArtifact.sourceFiles,
|
||||
inputArtifact.metadataSerializer,
|
||||
klibPath = outputFile,
|
||||
libraries.map { it.library },
|
||||
inputArtifact.irModuleFragment,
|
||||
@@ -71,9 +71,7 @@ class FirJsKlibBackendFacade(
|
||||
containsErrorCode = inputArtifact.hasErrors,
|
||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||
jsOutputName = null
|
||||
) {
|
||||
inputArtifact.serializeSingleFile(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: consider avoiding repeated libraries resolution
|
||||
|
||||
@@ -51,7 +51,7 @@ class JsKlibBackendFacade(
|
||||
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
|
||||
configuration,
|
||||
inputArtifact.diagnosticReporter,
|
||||
inputArtifact.sourceFiles,
|
||||
inputArtifact.metadataSerializer,
|
||||
klibPath = outputFile,
|
||||
JsEnvironmentConfigurator.getAllRecursiveLibrariesFor(module, testServices).keys.toList(),
|
||||
inputArtifact.irModuleFragment,
|
||||
@@ -61,9 +61,7 @@ class JsKlibBackendFacade(
|
||||
containsErrorCode = inputArtifact.hasErrors,
|
||||
abiVersion = KotlinAbiVersion.CURRENT, // TODO get from test file data
|
||||
jsOutputName = null
|
||||
) {
|
||||
inputArtifact.serializeSingleFile(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
val dependencies = JsEnvironmentConfigurator.getAllRecursiveDependenciesFor(module, testServices).toList()
|
||||
|
||||
Reference in New Issue
Block a user