[Native] Minor. Slightly refactor FirNativeSerializer.kt

This commit is contained in:
Dmitriy Novozhilov
2024-01-12 16:36:46 +02:00
committed by Space Team
parent 3aa84906c2
commit 1434d26d1b
@@ -40,12 +40,13 @@ internal fun PhaseContext.firSerializer(input: FirOutput): SerializerOutput? = w
else -> firSerializerBase(input.firResult, null) else -> firSerializerBase(input.firResult, null)
} }
internal fun PhaseContext.fir2IrSerializer(input: FirSerializerInput) = internal fun PhaseContext.fir2IrSerializer(input: FirSerializerInput): SerializerOutput {
firSerializerBase(input.firToIrOutput.firResult, input.firToIrOutput, produceHeaderKlib = input.produceHeaderKlib) return firSerializerBase(input.firToIrOutput.firResult, input.firToIrOutput, produceHeaderKlib = input.produceHeaderKlib)
}
internal fun PhaseContext.firSerializerBase( internal fun PhaseContext.firSerializerBase(
firResult: FirResult, firResult: FirResult,
fir2IrInput: Fir2IrOutput?, fir2IrOutput: Fir2IrOutput?,
produceHeaderKlib: Boolean = false, produceHeaderKlib: Boolean = false,
): SerializerOutput { ): SerializerOutput {
val configuration = config.configuration val configuration = config.configuration
@@ -63,13 +64,13 @@ internal fun PhaseContext.firSerializerBase(
configuration.get(CommonConfigurationKeys.METADATA_VERSION) configuration.get(CommonConfigurationKeys.METADATA_VERSION)
?: configuration.languageVersionSettings.languageVersion.toMetadataVersion() ?: configuration.languageVersionSettings.languageVersion.toMetadataVersion()
val usedResolvedLibraries = fir2IrInput?.let { val usedResolvedLibraries = fir2IrOutput?.let {
config.resolvedLibraries.getFullResolvedList(TopologicalLibraryOrder).filter { config.resolvedLibraries.getFullResolvedList(TopologicalLibraryOrder).filter {
(!it.isDefault && !configuration.getBoolean(KonanConfigKeys.PURGE_USER_LIBS)) || it in fir2IrInput.usedLibraries (!it.isDefault && !configuration.getBoolean(KonanConfigKeys.PURGE_USER_LIBS)) || it in fir2IrOutput.usedLibraries
} }
} }
val actualizedFirDeclarations = fir2IrInput?.irActualizedResult?.actualizedExpectDeclarations?.extractFirDeclarations() val actualizedFirDeclarations = fir2IrOutput?.irActualizedResult?.actualizedExpectDeclarations?.extractFirDeclarations()
val diagnosticReporter = DiagnosticReporterFactory.createPendingReporter() val diagnosticReporter = DiagnosticReporterFactory.createPendingReporter()
val serializerOutput = serializeNativeModule( val serializerOutput = serializeNativeModule(
configuration = configuration, configuration = configuration,
@@ -77,15 +78,15 @@ internal fun PhaseContext.firSerializerBase(
messageLogger = configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None, messageLogger = configuration.get(IrMessageLogger.IR_MESSAGE_LOGGER) ?: IrMessageLogger.None,
sourceFiles, sourceFiles,
usedResolvedLibraries?.map { it.library as KonanLibrary }, usedResolvedLibraries?.map { it.library as KonanLibrary },
fir2IrInput?.irModuleFragment, fir2IrOutput?.irModuleFragment,
moduleName = fir2IrInput?.irModuleFragment?.descriptor?.name?.asString() moduleName = fir2IrOutput?.irModuleFragment?.descriptor?.name?.asString()
?: firResult.outputs.last().session.moduleData.name.asString(), ?: firResult.outputs.last().session.moduleData.name.asString(),
firFilesAndSessionsBySourceFile, firFilesAndSessionsBySourceFile,
bodiesOnlyForInlines = produceHeaderKlib, bodiesOnlyForInlines = produceHeaderKlib,
skipPrivateApi = produceHeaderKlib, skipPrivateApi = produceHeaderKlib,
) { firFile, originalSession, originalScopeSession -> ) { firFile, originalSession, originalScopeSession ->
val session = fir2IrInput?.components?.session ?: originalSession val session = fir2IrOutput?.components?.session ?: originalSession
val scopeSession = fir2IrInput?.components?.scopeSession ?: originalScopeSession val scopeSession = fir2IrOutput?.components?.scopeSession ?: originalScopeSession
serializeSingleFirFile( serializeSingleFirFile(
firFile, firFile,
session, session,
@@ -93,12 +94,12 @@ internal fun PhaseContext.firSerializerBase(
actualizedFirDeclarations, actualizedFirDeclarations,
FirKLibSerializerExtension( FirKLibSerializerExtension(
session, metadataVersion, session, metadataVersion,
fir2IrInput?.let { fir2IrOutput?.let {
ConstValueProviderImpl(fir2IrInput.components) ConstValueProviderImpl(fir2IrOutput.components)
}, },
allowErrorTypes = false, allowErrorTypes = false,
exportKDoc = shouldExportKDoc(), exportKDoc = shouldExportKDoc(),
additionalMetadataProvider = fir2IrInput?.components?.annotationsFromPluginRegistrar?.createAdditionalMetadataProvider() additionalMetadataProvider = fir2IrOutput?.components?.annotationsFromPluginRegistrar?.createAdditionalMetadataProvider()
), ),
configuration.languageVersionSettings, configuration.languageVersionSettings,
produceHeaderKlib, produceHeaderKlib,
@@ -122,18 +123,17 @@ class KotlinFileSerializedData(
val path: String? get() = irData?.path ?: source.path val path: String? get() = irData?.path ?: source.path
} }
internal fun PhaseContext.serializeNativeModule( private fun serializeNativeModule(
configuration: CompilerConfiguration, configuration: CompilerConfiguration,
diagnosticReporter: DiagnosticReporter, diagnosticReporter: DiagnosticReporter,messageLogger: IrMessageLogger,
messageLogger: IrMessageLogger, files: List<KtSourceFile>,
files: List<KtSourceFile>, dependencies: List<KonanLibrary>?,
dependencies: List<KonanLibrary>?, moduleFragment: IrModuleFragment?,
moduleFragment: IrModuleFragment?, moduleName: String,
moduleName: String, firFilesAndSessionsBySourceFile: Map<KtSourceFile, Triple<FirFile, FirSession, ScopeSession>>,
firFilesAndSessionsBySourceFile: Map<KtSourceFile, Triple<FirFile, FirSession, ScopeSession>>, bodiesOnlyForInlines: Boolean = false,
bodiesOnlyForInlines: Boolean = false, skipPrivateApi: Boolean = false,
skipPrivateApi: Boolean = false, serializeSingleFile: (FirFile, FirSession, ScopeSession) -> ProtoBuf.PackageFragment
serializeSingleFile: (FirFile, FirSession, ScopeSession) -> ProtoBuf.PackageFragment
): SerializerOutput { ): SerializerOutput {
if (moduleFragment != null) { if (moduleFragment != null) {
assert(files.size == moduleFragment.files.size) assert(files.size == moduleFragment.files.size)