[FIR] Use KlibBasedSymbolProvider in FirCommonSessionFactory
Unify logic of KLib resolving (Common and JS) ^KT-56354 Fixed
This commit is contained in:
committed by
Space Team
parent
d829f8b684
commit
de5b475f7a
@@ -9,6 +9,7 @@ import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.backend.common.CompilationException
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.wasm.compileToLoweredIr
|
||||
@@ -512,7 +513,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
||||
}
|
||||
|
||||
val logger = configuration.resolverLogger
|
||||
val resolvedLibraries = jsResolveLibraries(libraries + friendLibraries, logger).getFullResolvedList()
|
||||
val resolvedLibraries = CommonJsKLibResolver.resolve(libraries + friendLibraries, logger).getFullResolvedList()
|
||||
|
||||
val sessionsWithSources = prepareJsSessions(
|
||||
ktFiles, configuration, escapedMainModuleName.asString(), resolvedLibraries, dependencyList,
|
||||
|
||||
@@ -197,6 +197,7 @@ fun <F> prepareCommonSessions(
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
libraryList: DependencyListForCliModule,
|
||||
resolvedLibraries: List<KotlinResolvedLibrary>,
|
||||
isCommonSource: (F) -> Boolean,
|
||||
fileBelongsToModule: (F, String) -> Boolean,
|
||||
createProviderAndScopeForIncrementalCompilation: (List<F>) -> IncrementalCompilationContext?,
|
||||
@@ -210,6 +211,7 @@ fun <F> prepareCommonSessions(
|
||||
libraryList.moduleDataProvider,
|
||||
projectEnvironment,
|
||||
librariesScope,
|
||||
resolvedLibraries,
|
||||
projectEnvironment.getPackagePartProvider(librariesScope) as PackageAndMetadataPartProvider,
|
||||
configuration.languageVersionSettings,
|
||||
registerExtraComponents = {},
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.cli.metadata
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.cli.common.*
|
||||
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.collectSources
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createContextForIncrementalCompilation
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createIncrementalCompilationScope
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.toAbstractProjectEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
@@ -36,12 +38,13 @@ import org.jetbrains.kotlin.fir.pipeline.resolveAndCheckFir
|
||||
import org.jetbrains.kotlin.fir.serialization.FirElementAwareSerializableStringTable
|
||||
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
|
||||
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
|
||||
import org.jetbrains.kotlin.library.SerializedMetadata
|
||||
import org.jetbrains.kotlin.library.*
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataHeaderFlags
|
||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
||||
import org.jetbrains.kotlin.modules.TargetId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||
import org.jetbrains.kotlin.util.DummyLogger
|
||||
import java.io.File
|
||||
|
||||
internal class FirMetadataSerializer(
|
||||
@@ -71,6 +74,12 @@ internal class FirMetadataSerializer(
|
||||
|
||||
val diagnosticsReporter = DiagnosticReporterFactory.createPendingReporter()
|
||||
|
||||
val klibFiles = configuration.get(CLIConfigurationKeys.CONTENT_ROOTS).orEmpty()
|
||||
.filterIsInstance<JvmClasspathRoot>()
|
||||
.filter { it.file.isDirectory || it.file.extension == "klib" }
|
||||
.map { it.file.absolutePath }
|
||||
val resolvedLibraries = CommonJsKLibResolver.resolve(klibFiles, DummyLogger).getFullResolvedList()
|
||||
|
||||
val outputs = if (isLightTree) {
|
||||
val projectEnvironment = environment.toAbstractProjectEnvironment() as VfsBasedProjectEnvironment
|
||||
var librariesScope = projectEnvironment.getSearchScopeForProjectLibraries()
|
||||
@@ -83,8 +92,8 @@ internal class FirMetadataSerializer(
|
||||
incrementalExcludesScope = null
|
||||
)?.also { librariesScope -= it }
|
||||
val sessionsWithSources = prepareCommonSessions(
|
||||
ltFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
|
||||
librariesScope, libraryList, groupedSources.isCommonSourceForLt, groupedSources.fileBelongsToModuleForLt,
|
||||
ltFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars, librariesScope,
|
||||
libraryList, resolvedLibraries, groupedSources.isCommonSourceForLt, groupedSources.fileBelongsToModuleForLt,
|
||||
createProviderAndScopeForIncrementalCompilation = { files ->
|
||||
createContextForIncrementalCompilation(
|
||||
configuration,
|
||||
@@ -121,7 +130,7 @@ internal class FirMetadataSerializer(
|
||||
}
|
||||
val sessionsWithSources = prepareCommonSessions(
|
||||
psiFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
|
||||
librariesScope, libraryList, isCommonSourceForPsi, fileBelongsToModuleForPsi,
|
||||
librariesScope, libraryList, resolvedLibraries, isCommonSourceForPsi, fileBelongsToModuleForPsi,
|
||||
createProviderAndScopeForIncrementalCompilation = { providerAndScopeForIncrementalCompilation }
|
||||
)
|
||||
|
||||
@@ -184,5 +193,4 @@ internal class FirMetadataSerializer(
|
||||
|
||||
buildKotlinMetadataLibrary(configuration, serializedMetadata, destDir)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+12
-1
@@ -25,9 +25,11 @@ import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
||||
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||
|
||||
object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
fun createLibrarySession(
|
||||
@@ -36,6 +38,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
moduleDataProvider: ModuleDataProvider,
|
||||
projectEnvironment: AbstractProjectEnvironment,
|
||||
librariesScope: AbstractProjectFileSearchScope,
|
||||
resolvedKLibs: List<KotlinResolvedLibrary>,
|
||||
packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
registerExtraComponents: ((FirSession) -> Unit),
|
||||
@@ -50,7 +53,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
},
|
||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||
createProviders = { session, builtinsModuleData, kotlinScopeProvider ->
|
||||
listOf(
|
||||
listOfNotNull(
|
||||
MetadataSymbolProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
@@ -58,6 +61,14 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||
packageAndMetadataPartProvider,
|
||||
projectEnvironment.getKotlinClassFinder(librariesScope)
|
||||
),
|
||||
runIf(resolvedKLibs.isNotEmpty()) {
|
||||
KlibBasedSymbolProvider(
|
||||
session,
|
||||
moduleDataProvider,
|
||||
kotlinScopeProvider,
|
||||
resolvedKLibs
|
||||
)
|
||||
},
|
||||
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||
)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js.ic
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||
import org.jetbrains.kotlin.backend.common.serialization.cityHash64
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
@@ -12,7 +13,6 @@ import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity
|
||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsIrProgramFragment
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.konan.properties.propertyList
|
||||
import org.jetbrains.kotlin.library.KLIB_PROPERTY_DEPENDS
|
||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||
@@ -87,7 +87,7 @@ class CacheUpdater(
|
||||
|
||||
// libraries in topological order: [stdlib, ..., main]
|
||||
val libraryDependencies = stopwatch.measure("Resolving and loading klib dependencies") {
|
||||
val allResolvedDependencies = jsResolveLibraries(allModules, compilerConfiguration.resolverLogger)
|
||||
val allResolvedDependencies = CommonJsKLibResolver.resolve(allModules, compilerConfiguration.resolverLogger)
|
||||
|
||||
val libraries = allResolvedDependencies.getFullList(TopologicalLibraryOrder).let { resolvedLibraries ->
|
||||
val mainLibraryIndex = resolvedLibraries.indexOfLast {
|
||||
|
||||
+49
-48
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.ir.backend.js
|
||||
package org.jetbrains.kotlin.backend.common
|
||||
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||
@@ -15,7 +15,53 @@ import org.jetbrains.kotlin.library.metadata.resolver.KotlinLibraryResolver
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.impl.libraryResolver
|
||||
import org.jetbrains.kotlin.util.Logger
|
||||
|
||||
class JsLibraryResolver(
|
||||
object CommonJsKLibResolver {
|
||||
fun resolve(libraries: Collection<String>, logger: Logger): KotlinLibraryResolveResult =
|
||||
resolveWithoutDependencies(
|
||||
libraries,
|
||||
logger
|
||||
).resolveWithDependencies()
|
||||
|
||||
fun resolveWithoutDependencies(
|
||||
libraries: Collection<String>,
|
||||
logger: Logger
|
||||
): KLibResolution {
|
||||
val unresolvedLibraries = libraries.map { UnresolvedLibrary(it, null) }
|
||||
val libraryAbsolutePaths = libraries.map { File(it).absolutePath }
|
||||
// Configure the resolver to only work with absolute paths for now.
|
||||
val libraryResolver = KLibResolverHelper(
|
||||
repositories = emptyList(),
|
||||
directLibs = libraryAbsolutePaths,
|
||||
distributionKlib = null,
|
||||
localKotlinDir = null,
|
||||
skipCurrentDir = false,
|
||||
logger = logger
|
||||
).libraryResolver()
|
||||
|
||||
return KLibResolution(
|
||||
libraryResolver,
|
||||
libraryResolver.resolveWithoutDependencies(
|
||||
unresolvedLibraries = unresolvedLibraries,
|
||||
noStdLib = true,
|
||||
noDefaultLibs = true,
|
||||
noEndorsedLibs = true
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class KLibResolution(
|
||||
private val libraryResolver: KotlinLibraryResolver<KotlinLibrary>,
|
||||
val libraries: List<KotlinLibrary>
|
||||
) {
|
||||
fun resolveWithDependencies(): KotlinLibraryResolveResult {
|
||||
return with(libraryResolver) {
|
||||
libraries.resolveDependencies()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class KLibResolverHelper(
|
||||
repositories: List<String>,
|
||||
directLibs: List<String>,
|
||||
distributionKlib: String?,
|
||||
@@ -33,49 +79,4 @@ class JsLibraryResolver(
|
||||
) {
|
||||
// Stick with the default KotlinLibrary for now.
|
||||
override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault)
|
||||
}
|
||||
|
||||
// TODO: This is a temporary set of library resolver policies for js compiler.
|
||||
fun jsResolveLibraries(libraries: Collection<String>, logger: Logger): KotlinLibraryResolveResult =
|
||||
jsResolveLibrariesWithoutDependencies(
|
||||
libraries,
|
||||
logger
|
||||
).resolveWithDependencies()
|
||||
|
||||
fun jsResolveLibrariesWithoutDependencies(
|
||||
libraries: Collection<String>,
|
||||
logger: Logger
|
||||
): JsResolution {
|
||||
val unresolvedLibraries = libraries.map { UnresolvedLibrary(it, null) }
|
||||
val libraryAbsolutePaths = libraries.map { File(it).absolutePath }
|
||||
// Configure the resolver to only work with absolute paths for now.
|
||||
val libraryResolver = JsLibraryResolver(
|
||||
repositories = emptyList(),
|
||||
directLibs = libraryAbsolutePaths,
|
||||
distributionKlib = null,
|
||||
localKotlinDir = null,
|
||||
skipCurrentDir = false,
|
||||
logger = logger
|
||||
).libraryResolver()
|
||||
|
||||
return JsResolution(
|
||||
libraryResolver,
|
||||
libraryResolver.resolveWithoutDependencies(
|
||||
unresolvedLibraries = unresolvedLibraries,
|
||||
noStdLib = true,
|
||||
noDefaultLibs = true,
|
||||
noEndorsedLibs = true
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
class JsResolution(
|
||||
private val libraryResolver: KotlinLibraryResolver<KotlinLibrary>,
|
||||
val libraries: List<KotlinLibrary>
|
||||
) {
|
||||
fun resolveWithDependencies(): KotlinLibraryResolveResult {
|
||||
return with(libraryResolver) {
|
||||
libraries.resolveDependencies()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.KtVirtualFileSourceFile
|
||||
import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||
import org.jetbrains.kotlin.analyzer.CompilationErrorException
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
||||
@@ -469,7 +470,7 @@ class ModulesStructure(
|
||||
friendDependenciesPaths: Collection<String>,
|
||||
) {
|
||||
|
||||
val allDependenciesResolution = jsResolveLibrariesWithoutDependencies(
|
||||
val allDependenciesResolution = CommonJsKLibResolver.resolveWithoutDependencies(
|
||||
dependencies,
|
||||
compilerConfiguration.resolverLogger
|
||||
)
|
||||
|
||||
+2
-2
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonDependenciesContainer
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
|
||||
@@ -69,7 +70,6 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
||||
import org.jetbrains.kotlin.test.directives.MultiplatformDiagnosticsDirectives.ENABLE_MULTIPLATFORM_COMPOSITE_ANALYSIS_MODE
|
||||
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||
import org.jetbrains.kotlin.test.model.FrontendFacade
|
||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||
@@ -274,7 +274,7 @@ class ClassicFrontendFacade(
|
||||
}
|
||||
|
||||
private fun loadKlib(names: List<String>, configuration: CompilerConfiguration): List<ModuleDescriptor> {
|
||||
val resolvedLibraries = jsResolveLibraries(
|
||||
val resolvedLibraries = CommonJsKLibResolver.resolve(
|
||||
names,
|
||||
configuration.resolverLogger
|
||||
).getFullResolvedList()
|
||||
|
||||
+3
-4
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.test.frontend.fir
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
@@ -15,9 +16,7 @@ import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.session.FirJsSessionFactory
|
||||
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.ir.backend.js.jsResolveLibraries
|
||||
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||
@@ -39,7 +38,7 @@ object TestFirJsSessionFactory {
|
||||
): FirSession {
|
||||
val logger = configuration.resolverLogger
|
||||
val libraries = getAllJsDependenciesPaths(module, testServices)
|
||||
val resolvedLibraries = jsResolveLibraries(libraries, logger).getFullResolvedList()
|
||||
val resolvedLibraries = CommonJsKLibResolver.resolve(libraries, logger).getFullResolvedList()
|
||||
|
||||
return FirJsSessionFactory.createLibrarySession(
|
||||
mainModuleName,
|
||||
@@ -75,7 +74,7 @@ fun resolveJsLibraries(
|
||||
): List<KotlinResolvedLibrary> {
|
||||
val paths = getAllJsDependenciesPaths(module, testServices)
|
||||
val logger = configuration.resolverLogger
|
||||
return jsResolveLibraries(paths, logger).getFullResolvedList()
|
||||
return CommonJsKLibResolver.resolve(paths, logger).getFullResolvedList()
|
||||
}
|
||||
|
||||
fun getAllJsDependenciesPaths(module: TestModule, testServices: TestServices): List<String> {
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.klib
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
|
||||
import org.jetbrains.kotlin.backend.common.serialization.DeserializationStrategy
|
||||
import org.jetbrains.kotlin.backend.common.serialization.linkerissues.checkNoUnboundSymbols
|
||||
@@ -26,7 +27,6 @@ import org.jetbrains.kotlin.ir.AbstractIrGeneratorTestCase
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||
import org.jetbrains.kotlin.ir.backend.js.KotlinFileSerializedData
|
||||
import org.jetbrains.kotlin.ir.backend.js.jsResolveLibraries
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
||||
@@ -234,7 +234,7 @@ abstract class AbstractKlibTextTestCase : CodegenTestCase() {
|
||||
}
|
||||
|
||||
private fun loadKlibFromPath(paths: List<String>): List<KotlinLibrary> {
|
||||
val result = jsResolveLibraries(paths, DummyLogger)
|
||||
val result = CommonJsKLibResolver.resolve(paths, DummyLogger)
|
||||
return result.getFullList(TopologicalLibraryOrder)
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.klib
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.serialization.codedInputStream
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFile
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
@@ -102,7 +103,7 @@ class FilePathsInKlibTest : CodegenTestCase() {
|
||||
private fun File.md5(): Long = readBytes().md5()
|
||||
|
||||
private fun File.loadKlibFilePaths(): List<String> {
|
||||
val libs = jsResolveLibraries(listOf(runtimeKlibPath, canonicalPath), DummyLogger).getFullList()
|
||||
val libs = CommonJsKLibResolver.resolve(listOf(runtimeKlibPath, canonicalPath), DummyLogger).getFullList()
|
||||
val lib = libs.last()
|
||||
val fileSize = lib.fileCount()
|
||||
val extReg = ExtensionRegistryLite.newInstance()
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.js.test.converters
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
@@ -12,7 +13,6 @@ import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||
import org.jetbrains.kotlin.ir.backend.js.jsResolveLibraries
|
||||
import org.jetbrains.kotlin.ir.backend.js.resolverLogger
|
||||
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
@@ -85,7 +85,7 @@ class FirJsKlibBackendFacade(
|
||||
}
|
||||
|
||||
// TODO: consider avoiding repeated libraries resolution
|
||||
val lib = jsResolveLibraries(
|
||||
val lib = CommonJsKLibResolver.resolve(
|
||||
getAllJsDependenciesPaths(module, testServices) + listOf(outputFile),
|
||||
configuration.resolverLogger
|
||||
).getFullResolvedList().last().library
|
||||
|
||||
@@ -5,14 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.js.test.converters
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CommonJsKLibResolver
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.ir.backend.js.*
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
import org.jetbrains.kotlin.ir.util.irMessageLogger
|
||||
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||
import org.jetbrains.kotlin.js.test.utils.JsIrIncrementalDataProvider
|
||||
import org.jetbrains.kotlin.js.test.utils.jsIrIncrementalDataProvider
|
||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||
@@ -69,7 +67,7 @@ class JsKlibBackendFacade(
|
||||
}
|
||||
|
||||
val dependencies = JsEnvironmentConfigurator.getAllRecursiveDependenciesFor(module, testServices).toList()
|
||||
val lib = jsResolveLibraries(
|
||||
val lib = CommonJsKLibResolver.resolve(
|
||||
dependencies.map { testServices.jsLibraryProvider.getPathByDescriptor(it) } + listOf(outputFile),
|
||||
configuration.resolverLogger
|
||||
).getFullResolvedList().last().library
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.gradle
|
||||
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
|
||||
@OtherGradlePluginTests
|
||||
class KotlinxSerializationMppK2IT : KGPBaseTest() {
|
||||
private val gradleVersion = GradleVersion.version(TestVersions.Gradle.MAX_SUPPORTED)
|
||||
|
||||
@DisplayName("Compile common code to metadata with kotlinx.serialization and K2")
|
||||
@GradleTest
|
||||
fun `test kotlinxSerializationMppK2`() {
|
||||
project("kotlinxSerializationMppK2", gradleVersion) {
|
||||
build(":compileCommonMainKotlinMetadata") {
|
||||
assertTasksExecuted(":compileCommonMainKotlinMetadata")
|
||||
assertOutputContains("BUILD SUCCESSFUL")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
plugins {
|
||||
kotlin("multiplatform")
|
||||
kotlin("plugin.serialization")
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvm()
|
||||
js(IR) {
|
||||
browser {
|
||||
commonWebpackConfig {
|
||||
cssSupport {
|
||||
enabled.set(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sourceSets {
|
||||
all {
|
||||
languageSettings.apply {
|
||||
languageVersion = "2.0"
|
||||
}
|
||||
}
|
||||
val commonMain by getting {
|
||||
dependencies{
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0-RC")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
rootProject.name = "kotlinxSerializationMppK2"
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ValidateViolation(
|
||||
val filed: String,
|
||||
)
|
||||
Reference in New Issue
Block a user