[K2, MPP] Remove redundant expect declarations from klib metadata

^KT-57250 Fixed

Introduce flat Fir2IrActualizedResult

It contains output from Fir2Ir and IrActualizer
This commit is contained in:
Ivan Kochurkin
2023-03-15 18:41:52 +01:00
committed by Space Team
parent d91efb212d
commit ee73e4774b
42 changed files with 324 additions and 111 deletions
@@ -27,16 +27,14 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.*
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForJSIR
import org.jetbrains.kotlin.cli.js.klib.TopDownAnalyzerFacadeForWasm
import org.jetbrains.kotlin.cli.js.klib.compileModuleToAnalyzedFir
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
import org.jetbrains.kotlin.cli.js.klib.serializeFirKlib
import org.jetbrains.kotlin.cli.js.klib.transformFirToIr
import org.jetbrains.kotlin.cli.js.klib.*
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.config.getModuleNameForSource
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
@@ -68,7 +66,6 @@ import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.join
import java.io.File
import java.io.IOException
import java.nio.charset.Charset
private val K2JSCompilerArguments.granularity: JsGenerationGranularity
get() = when {
@@ -493,14 +490,14 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
) ?: return null
// FIR2IR
val irResult = transformFirToIr(moduleStructure, outputs, diagnosticsReporter)
val fir2IrActualizedResult = transformFirToIr(moduleStructure, outputs, diagnosticsReporter)
// Serialize klib
if (arguments.irProduceKlibDir || arguments.irProduceKlibFile) {
serializeFirKlib(
moduleStructure = moduleStructure,
firOutputs = outputs,
irResult = irResult,
fir2IrActualizedResult = fir2IrActualizedResult,
outputKlibPath = outputKlibPath,
messageCollector = messageCollector,
diagnosticsReporter = diagnosticsReporter,
@@ -26,15 +26,12 @@ import org.jetbrains.kotlin.fir.BinaryModuleData
import org.jetbrains.kotlin.fir.DependencyListForCliModule
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
import org.jetbrains.kotlin.fir.backend.Fir2IrResult
import org.jetbrains.kotlin.fir.backend.Fir2IrVisibilityConverter
import org.jetbrains.kotlin.fir.backend.extractFirDeclarations
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.pipeline.FirResult
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFir
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualize
import org.jetbrains.kotlin.fir.pipeline.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.serialization.FirElementAwareSerializableStringTable
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
@@ -103,7 +100,7 @@ fun transformFirToIr(
moduleStructure: ModulesStructure,
firOutputs: List<ModuleCompilerAnalyzedOutput>,
diagnosticsReporter: PendingDiagnosticsCollectorWithSuppress,
): Fir2IrResult {
): Fir2IrActualizedResult {
val fir2IrExtensions = Fir2IrExtensions.Default
var builtInsModule: KotlinBuiltIns? = null
@@ -149,7 +146,7 @@ fun transformFirToIr(
fun serializeFirKlib(
moduleStructure: ModulesStructure,
firOutputs: List<ModuleCompilerAnalyzedOutput>,
irResult: Fir2IrResult,
fir2IrActualizedResult: Fir2IrActualizedResult,
outputKlibPath: String,
messageCollector: MessageCollector,
diagnosticsReporter: BaseDiagnosticsCollector,
@@ -169,6 +166,8 @@ fun serializeFirKlib(
val metadataVersion = moduleStructure.compilerConfiguration.metadataVersion()
val actualizedExpectDeclarations = fir2IrActualizedResult.irActualizationResult.extractFirDeclarations()
serializeModuleIntoKlib(
moduleStructure.compilerConfiguration[CommonConfigurationKeys.MODULE_NAME]!!,
moduleStructure.compilerConfiguration,
@@ -176,7 +175,7 @@ fun serializeFirKlib(
sourceFiles,
klibPath = outputKlibPath,
moduleStructure.allDependencies,
irResult.irModuleFragment,
fir2IrActualizedResult.irModuleFragment,
expectDescriptorToSymbol = mutableMapOf(),
cleanFiles = icData,
nopack = true,
@@ -191,6 +190,7 @@ fun serializeFirKlib(
firFile,
session,
scopeSession,
actualizedExpectDeclarations,
FirKLibSerializerExtension(session, metadataVersion, FirElementAwareSerializableStringTable()),
moduleStructure.compilerConfiguration.languageVersionSettings,
)