[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 com.intellij.openapi.util.text.StringUtil
|
||||||
import org.jetbrains.kotlin.KtSourceFile
|
import org.jetbrains.kotlin.KtSourceFile
|
||||||
import org.jetbrains.kotlin.backend.common.CompilationException
|
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.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.wasm.compileToLoweredIr
|
import org.jetbrains.kotlin.backend.wasm.compileToLoweredIr
|
||||||
@@ -512,7 +513,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val logger = configuration.resolverLogger
|
val logger = configuration.resolverLogger
|
||||||
val resolvedLibraries = jsResolveLibraries(libraries + friendLibraries, logger).getFullResolvedList()
|
val resolvedLibraries = CommonJsKLibResolver.resolve(libraries + friendLibraries, logger).getFullResolvedList()
|
||||||
|
|
||||||
val sessionsWithSources = prepareJsSessions(
|
val sessionsWithSources = prepareJsSessions(
|
||||||
ktFiles, configuration, escapedMainModuleName.asString(), resolvedLibraries, dependencyList,
|
ktFiles, configuration, escapedMainModuleName.asString(), resolvedLibraries, dependencyList,
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ fun <F> prepareCommonSessions(
|
|||||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||||
librariesScope: AbstractProjectFileSearchScope,
|
librariesScope: AbstractProjectFileSearchScope,
|
||||||
libraryList: DependencyListForCliModule,
|
libraryList: DependencyListForCliModule,
|
||||||
|
resolvedLibraries: List<KotlinResolvedLibrary>,
|
||||||
isCommonSource: (F) -> Boolean,
|
isCommonSource: (F) -> Boolean,
|
||||||
fileBelongsToModule: (F, String) -> Boolean,
|
fileBelongsToModule: (F, String) -> Boolean,
|
||||||
createProviderAndScopeForIncrementalCompilation: (List<F>) -> IncrementalCompilationContext?,
|
createProviderAndScopeForIncrementalCompilation: (List<F>) -> IncrementalCompilationContext?,
|
||||||
@@ -210,6 +211,7 @@ fun <F> prepareCommonSessions(
|
|||||||
libraryList.moduleDataProvider,
|
libraryList.moduleDataProvider,
|
||||||
projectEnvironment,
|
projectEnvironment,
|
||||||
librariesScope,
|
librariesScope,
|
||||||
|
resolvedLibraries,
|
||||||
projectEnvironment.getPackagePartProvider(librariesScope) as PackageAndMetadataPartProvider,
|
projectEnvironment.getPackagePartProvider(librariesScope) as PackageAndMetadataPartProvider,
|
||||||
configuration.languageVersionSettings,
|
configuration.languageVersionSettings,
|
||||||
registerExtraComponents = {},
|
registerExtraComponents = {},
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.cli.metadata
|
|||||||
import com.intellij.openapi.vfs.StandardFileSystems
|
import com.intellij.openapi.vfs.StandardFileSystems
|
||||||
import com.intellij.openapi.vfs.VirtualFileManager
|
import com.intellij.openapi.vfs.VirtualFileManager
|
||||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
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.*
|
||||||
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
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.createContextForIncrementalCompilation
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createIncrementalCompilationScope
|
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.createIncrementalCompilationScope
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.toAbstractProjectEnvironment
|
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.jvmClasspathRoots
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
|
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
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.FirElementAwareSerializableStringTable
|
||||||
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
|
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
|
||||||
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
|
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.KlibMetadataHeaderFlags
|
||||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||||
|
import org.jetbrains.kotlin.util.DummyLogger
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal class FirMetadataSerializer(
|
internal class FirMetadataSerializer(
|
||||||
@@ -71,6 +74,12 @@ internal class FirMetadataSerializer(
|
|||||||
|
|
||||||
val diagnosticsReporter = DiagnosticReporterFactory.createPendingReporter()
|
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 outputs = if (isLightTree) {
|
||||||
val projectEnvironment = environment.toAbstractProjectEnvironment() as VfsBasedProjectEnvironment
|
val projectEnvironment = environment.toAbstractProjectEnvironment() as VfsBasedProjectEnvironment
|
||||||
var librariesScope = projectEnvironment.getSearchScopeForProjectLibraries()
|
var librariesScope = projectEnvironment.getSearchScopeForProjectLibraries()
|
||||||
@@ -83,8 +92,8 @@ internal class FirMetadataSerializer(
|
|||||||
incrementalExcludesScope = null
|
incrementalExcludesScope = null
|
||||||
)?.also { librariesScope -= it }
|
)?.also { librariesScope -= it }
|
||||||
val sessionsWithSources = prepareCommonSessions(
|
val sessionsWithSources = prepareCommonSessions(
|
||||||
ltFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
|
ltFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars, librariesScope,
|
||||||
librariesScope, libraryList, groupedSources.isCommonSourceForLt, groupedSources.fileBelongsToModuleForLt,
|
libraryList, resolvedLibraries, groupedSources.isCommonSourceForLt, groupedSources.fileBelongsToModuleForLt,
|
||||||
createProviderAndScopeForIncrementalCompilation = { files ->
|
createProviderAndScopeForIncrementalCompilation = { files ->
|
||||||
createContextForIncrementalCompilation(
|
createContextForIncrementalCompilation(
|
||||||
configuration,
|
configuration,
|
||||||
@@ -121,7 +130,7 @@ internal class FirMetadataSerializer(
|
|||||||
}
|
}
|
||||||
val sessionsWithSources = prepareCommonSessions(
|
val sessionsWithSources = prepareCommonSessions(
|
||||||
psiFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
|
psiFiles, configuration, projectEnvironment, rootModuleName, extensionRegistrars,
|
||||||
librariesScope, libraryList, isCommonSourceForPsi, fileBelongsToModuleForPsi,
|
librariesScope, libraryList, resolvedLibraries, isCommonSourceForPsi, fileBelongsToModuleForPsi,
|
||||||
createProviderAndScopeForIncrementalCompilation = { providerAndScopeForIncrementalCompilation }
|
createProviderAndScopeForIncrementalCompilation = { providerAndScopeForIncrementalCompilation }
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -185,4 +194,3 @@ internal class FirMetadataSerializer(
|
|||||||
buildKotlinMetadataLibrary(configuration, serializedMetadata, destDir)
|
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.fir.session.environment.AbstractProjectFileSearchScope
|
||||||
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
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.load.kotlin.PackageAndMetadataPartProvider
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
|
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
|
|
||||||
object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
||||||
fun createLibrarySession(
|
fun createLibrarySession(
|
||||||
@@ -36,6 +38,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
|||||||
moduleDataProvider: ModuleDataProvider,
|
moduleDataProvider: ModuleDataProvider,
|
||||||
projectEnvironment: AbstractProjectEnvironment,
|
projectEnvironment: AbstractProjectEnvironment,
|
||||||
librariesScope: AbstractProjectFileSearchScope,
|
librariesScope: AbstractProjectFileSearchScope,
|
||||||
|
resolvedKLibs: List<KotlinResolvedLibrary>,
|
||||||
packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
|
packageAndMetadataPartProvider: PackageAndMetadataPartProvider,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
registerExtraComponents: ((FirSession) -> Unit),
|
registerExtraComponents: ((FirSession) -> Unit),
|
||||||
@@ -50,7 +53,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
|||||||
},
|
},
|
||||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } },
|
||||||
createProviders = { session, builtinsModuleData, kotlinScopeProvider ->
|
createProviders = { session, builtinsModuleData, kotlinScopeProvider ->
|
||||||
listOf(
|
listOfNotNull(
|
||||||
MetadataSymbolProvider(
|
MetadataSymbolProvider(
|
||||||
session,
|
session,
|
||||||
moduleDataProvider,
|
moduleDataProvider,
|
||||||
@@ -58,6 +61,14 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() {
|
|||||||
packageAndMetadataPartProvider,
|
packageAndMetadataPartProvider,
|
||||||
projectEnvironment.getKotlinClassFinder(librariesScope)
|
projectEnvironment.getKotlinClassFinder(librariesScope)
|
||||||
),
|
),
|
||||||
|
runIf(resolvedKLibs.isNotEmpty()) {
|
||||||
|
KlibBasedSymbolProvider(
|
||||||
|
session,
|
||||||
|
moduleDataProvider,
|
||||||
|
kotlinScopeProvider,
|
||||||
|
resolvedKLibs
|
||||||
|
)
|
||||||
|
},
|
||||||
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||||
FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.ic
|
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.phaser.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.cityHash64
|
import org.jetbrains.kotlin.backend.common.serialization.cityHash64
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
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.backend.js.transformers.irToJs.JsIrProgramFragment
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.konan.properties.propertyList
|
import org.jetbrains.kotlin.konan.properties.propertyList
|
||||||
import org.jetbrains.kotlin.library.KLIB_PROPERTY_DEPENDS
|
import org.jetbrains.kotlin.library.KLIB_PROPERTY_DEPENDS
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
@@ -87,7 +87,7 @@ class CacheUpdater(
|
|||||||
|
|
||||||
// libraries in topological order: [stdlib, ..., main]
|
// libraries in topological order: [stdlib, ..., main]
|
||||||
val libraryDependencies = stopwatch.measure("Resolving and loading klib dependencies") {
|
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 libraries = allResolvedDependencies.getFullList(TopologicalLibraryOrder).let { resolvedLibraries ->
|
||||||
val mainLibraryIndex = resolvedLibraries.indexOfLast {
|
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.
|
* 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.konan.file.File
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
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.library.metadata.resolver.impl.libraryResolver
|
||||||
import org.jetbrains.kotlin.util.Logger
|
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>,
|
repositories: List<String>,
|
||||||
directLibs: List<String>,
|
directLibs: List<String>,
|
||||||
distributionKlib: String?,
|
distributionKlib: String?,
|
||||||
@@ -34,48 +80,3 @@ class JsLibraryResolver(
|
|||||||
// Stick with the default KotlinLibrary for now.
|
// Stick with the default KotlinLibrary for now.
|
||||||
override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault)
|
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.AbstractAnalyzerWithCompilerReport
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.analyzer.CompilationErrorException
|
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.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
||||||
@@ -469,7 +470,7 @@ class ModulesStructure(
|
|||||||
friendDependenciesPaths: Collection<String>,
|
friendDependenciesPaths: Collection<String>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val allDependenciesResolution = jsResolveLibrariesWithoutDependencies(
|
val allDependenciesResolution = CommonJsKLibResolver.resolveWithoutDependencies(
|
||||||
dependencies,
|
dependencies,
|
||||||
compilerConfiguration.resolverLogger
|
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.CommonDependenciesContainer
|
||||||
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
|
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.DefaultBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
|
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.storage.StorageManager
|
||||||
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
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.DependencyRelation
|
||||||
import org.jetbrains.kotlin.test.model.FrontendFacade
|
import org.jetbrains.kotlin.test.model.FrontendFacade
|
||||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||||
@@ -274,7 +274,7 @@ class ClassicFrontendFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun loadKlib(names: List<String>, configuration: CompilerConfiguration): List<ModuleDescriptor> {
|
private fun loadKlib(names: List<String>, configuration: CompilerConfiguration): List<ModuleDescriptor> {
|
||||||
val resolvedLibraries = jsResolveLibraries(
|
val resolvedLibraries = CommonJsKLibResolver.resolve(
|
||||||
names,
|
names,
|
||||||
configuration.resolverLogger
|
configuration.resolverLogger
|
||||||
).getFullResolvedList()
|
).getFullResolvedList()
|
||||||
|
|||||||
+3
-4
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.test.frontend.fir
|
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.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
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.FirJsSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
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.ir.backend.js.resolverLogger
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.test.model.DependencyRelation
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
@@ -39,7 +38,7 @@ object TestFirJsSessionFactory {
|
|||||||
): FirSession {
|
): FirSession {
|
||||||
val logger = configuration.resolverLogger
|
val logger = configuration.resolverLogger
|
||||||
val libraries = getAllJsDependenciesPaths(module, testServices)
|
val libraries = getAllJsDependenciesPaths(module, testServices)
|
||||||
val resolvedLibraries = jsResolveLibraries(libraries, logger).getFullResolvedList()
|
val resolvedLibraries = CommonJsKLibResolver.resolve(libraries, logger).getFullResolvedList()
|
||||||
|
|
||||||
return FirJsSessionFactory.createLibrarySession(
|
return FirJsSessionFactory.createLibrarySession(
|
||||||
mainModuleName,
|
mainModuleName,
|
||||||
@@ -75,7 +74,7 @@ fun resolveJsLibraries(
|
|||||||
): List<KotlinResolvedLibrary> {
|
): List<KotlinResolvedLibrary> {
|
||||||
val paths = getAllJsDependenciesPaths(module, testServices)
|
val paths = getAllJsDependenciesPaths(module, testServices)
|
||||||
val logger = configuration.resolverLogger
|
val logger = configuration.resolverLogger
|
||||||
return jsResolveLibraries(paths, logger).getFullResolvedList()
|
return CommonJsKLibResolver.resolve(paths, logger).getFullResolvedList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllJsDependenciesPaths(module: TestModule, testServices: TestServices): List<String> {
|
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.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import junit.framework.TestCase
|
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.CompatibilityMode
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.DeserializationStrategy
|
import org.jetbrains.kotlin.backend.common.serialization.DeserializationStrategy
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.linkerissues.checkNoUnboundSymbols
|
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.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
||||||
import org.jetbrains.kotlin.ir.backend.js.KotlinFileSerializedData
|
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.JsIrLinker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer
|
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc
|
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> {
|
private fun loadKlibFromPath(paths: List<String>): List<KotlinLibrary> {
|
||||||
val result = jsResolveLibraries(paths, DummyLogger)
|
val result = CommonJsKLibResolver.resolve(paths, DummyLogger)
|
||||||
return result.getFullList(TopologicalLibraryOrder)
|
return result.getFullList(TopologicalLibraryOrder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.klib
|
|||||||
import com.intellij.openapi.vfs.StandardFileSystems
|
import com.intellij.openapi.vfs.StandardFileSystems
|
||||||
import com.intellij.openapi.vfs.VirtualFileManager
|
import com.intellij.openapi.vfs.VirtualFileManager
|
||||||
import com.intellij.psi.PsiManager
|
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.codedInputStream
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFile
|
import org.jetbrains.kotlin.backend.common.serialization.proto.IrFile
|
||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
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.md5(): Long = readBytes().md5()
|
||||||
|
|
||||||
private fun File.loadKlibFilePaths(): List<String> {
|
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 lib = libs.last()
|
||||||
val fileSize = lib.fileCount()
|
val fileSize = lib.fileCount()
|
||||||
val extReg = ExtensionRegistryLite.newInstance()
|
val extReg = ExtensionRegistryLite.newInstance()
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.js.test.converters
|
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.backend.common.actualizer.IrActualizer
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
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.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsFactories
|
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.resolverLogger
|
||||||
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
import org.jetbrains.kotlin.ir.backend.js.serializeModuleIntoKlib
|
||||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||||
@@ -85,7 +85,7 @@ class FirJsKlibBackendFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: consider avoiding repeated libraries resolution
|
// TODO: consider avoiding repeated libraries resolution
|
||||||
val lib = jsResolveLibraries(
|
val lib = CommonJsKLibResolver.resolve(
|
||||||
getAllJsDependenciesPaths(module, testServices) + listOf(outputFile),
|
getAllJsDependenciesPaths(module, testServices) + listOf(outputFile),
|
||||||
configuration.resolverLogger
|
configuration.resolverLogger
|
||||||
).getFullResolvedList().last().library
|
).getFullResolvedList().last().library
|
||||||
|
|||||||
@@ -5,14 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.js.test.converters
|
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.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.ir.backend.js.*
|
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.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.js.test.utils.jsIrIncrementalDataProvider
|
import org.jetbrains.kotlin.js.test.utils.jsIrIncrementalDataProvider
|
||||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||||
@@ -69,7 +67,7 @@ class JsKlibBackendFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val dependencies = JsEnvironmentConfigurator.getAllRecursiveDependenciesFor(module, testServices).toList()
|
val dependencies = JsEnvironmentConfigurator.getAllRecursiveDependenciesFor(module, testServices).toList()
|
||||||
val lib = jsResolveLibraries(
|
val lib = CommonJsKLibResolver.resolve(
|
||||||
dependencies.map { testServices.jsLibraryProvider.getPathByDescriptor(it) } + listOf(outputFile),
|
dependencies.map { testServices.jsLibraryProvider.getPathByDescriptor(it) } + listOf(outputFile),
|
||||||
configuration.resolverLogger
|
configuration.resolverLogger
|
||||||
).getFullResolvedList().last().library
|
).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