Extract common buildKotlinMetadataLibrary

Use it in FirMetadataSerializer and K2MetadataKlibSerializer
This commit is contained in:
Ivan Kochurkin
2023-01-17 23:27:43 +01:00
committed by Space Team
parent 1dde34b610
commit bf145ddee8
3 changed files with 50 additions and 54 deletions
@@ -14,7 +14,10 @@ import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
import org.jetbrains.kotlin.cli.jvm.compiler.*
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.collectSources
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createContextForIncrementalCompilation
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.FirModuleDataImpl
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
@@ -32,14 +35,9 @@ import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
import org.jetbrains.kotlin.fir.session.FirCommonSessionFactory
import org.jetbrains.kotlin.fir.session.IncrementalCompilationContext
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
import org.jetbrains.kotlin.library.SerializedMetadata
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKotlinLibrary
import org.jetbrains.kotlin.library.metadata.KlibMetadataHeaderFlags
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.modules.TargetId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
@@ -195,27 +193,7 @@ internal class FirMetadataSerializer(
val serializedMetadata = SerializedMetadata(module, fragmentParts, fragmentNames)
val versions = KotlinLibraryVersioning(
abiVersion = KotlinAbiVersion.CURRENT,
libraryVersion = null,
compilerVersion = KotlinCompilerVersion.getVersion(),
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
irVersion = null
)
buildKotlinLibrary(
emptyList(),
serializedMetadata,
null,
versions,
destDir.absolutePath,
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
nopack = true,
perFile = false,
manifestProperties = null,
dataFlowGraph = null,
builtInsPlatform = BuiltInsPlatform.COMMON
)
buildKotlinMetadataLibrary(configuration, serializedMetadata, destDir)
}
}
@@ -15,19 +15,16 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.JvmContentRoot
import org.jetbrains.kotlin.cli.jvm.config.K2MetadataConfigurationKeys
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKotlinLibrary
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.metadata.*
import org.jetbrains.kotlin.library.metadata.impl.KlibMetadataModuleDescriptorFactoryImpl
import org.jetbrains.kotlin.library.resolveSingleFileKlib
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform
@@ -55,7 +52,7 @@ internal class K2MetadataKlibSerializer(
val project = environment.project
val module = analysisResult.moduleDescriptor
val serializedMetadata: SerializedMetadata = KlibMetadataMonolithicSerializer(
val serializedMetadata = KlibMetadataMonolithicSerializer(
configuration.languageVersionSettings,
metadataVersion,
project,
@@ -64,27 +61,7 @@ internal class K2MetadataKlibSerializer(
includeOnlyModuleContent = true
).serializeModule(module)
val versions = KotlinLibraryVersioning(
abiVersion = KotlinAbiVersion.CURRENT,
libraryVersion = null,
compilerVersion = KotlinCompilerVersion.getVersion(),
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
irVersion = null
)
buildKotlinLibrary(
emptyList(),
serializedMetadata,
null,
versions,
destDir.absolutePath,
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
nopack = true,
perFile = false,
manifestProperties = null,
dataFlowGraph = null,
builtInsPlatform = BuiltInsPlatform.COMMON
)
buildKotlinMetadataLibrary(configuration, serializedMetadata, destDir)
}
}
@@ -0,0 +1,41 @@
/*
* Copyright 2010-2023 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.cli.metadata
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
import org.jetbrains.kotlin.library.SerializedMetadata
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.library.impl.buildKotlinLibrary
import org.jetbrains.kotlin.library.metadata.KlibMetadataVersion
import java.io.File
fun buildKotlinMetadataLibrary(configuration: CompilerConfiguration, serializedMetadata: SerializedMetadata, destDir: File) {
val versions = KotlinLibraryVersioning(
abiVersion = KotlinAbiVersion.CURRENT,
libraryVersion = null,
compilerVersion = KotlinCompilerVersion.getVersion(),
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
irVersion = null
)
buildKotlinLibrary(
emptyList(),
serializedMetadata,
null,
versions,
destDir.absolutePath,
configuration[CommonConfigurationKeys.MODULE_NAME]!!,
nopack = true,
perFile = false,
manifestProperties = null,
dataFlowGraph = null,
builtInsPlatform = BuiltInsPlatform.COMMON
)
}