KLIB Loading, JVM: Drop `JvmLibraryResolver`
Use a new entry point instead: loadJvmKlibs().
^KT-65837
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt
index 9092459..b0bc38f 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt
@@ -21,7 +21,6 @@
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
-import org.jetbrains.kotlin.cli.common.messages.toLogger
import org.jetbrains.kotlin.cli.common.perfManager
import org.jetbrains.kotlin.cli.jvm.config.*
import org.jetbrains.kotlin.cli.jvm.config.ClassicFrontendSpecificJvmConfigurationKeys.JAVA_CLASSES_TRACKER
@@ -38,8 +37,9 @@
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
import org.jetbrains.kotlin.fir.pipeline.Fir2IrActualizedResult
-import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
+import org.jetbrains.kotlin.ir.backend.jvm.loadJvmKlibs
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
+import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager
import org.jetbrains.kotlin.modules.Module
import org.jetbrains.kotlin.modules.TargetId
@@ -324,13 +324,11 @@
}
fun analyze(environment: KotlinCoreEnvironment): AnalysisResult? {
+ val klibs: List<KotlinLibrary> = loadJvmKlibs(environment.configuration).all
+
val collector = environment.messageCollector
val sourceFiles = environment.getSourceFiles()
- val resolvedKlibs = environment.configuration.get(JVMConfigurationKeys.KLIB_PATHS)?.let { klibPaths ->
- jvmResolveLibraries(klibPaths, collector.toLogger())
- }?.getFullList() ?: emptyList()
-
val analyzerWithCompilerReport = AnalyzerWithCompilerReport(
collector,
environment.configuration.languageVersionSettings,
@@ -353,7 +351,7 @@
environment.configuration,
environment::createPackagePartProvider,
sourceModuleSearchScope = scope,
- klibList = resolvedKlibs
+ klibList = klibs
)
}
diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/JvmLibraryResolver.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/JvmLibraryResolver.kt
deleted file mode 100644
index 7d049a4..0000000
--- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/JvmLibraryResolver.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2010-2019 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.jvm
-
-import org.jetbrains.kotlin.konan.file.File
-import org.jetbrains.kotlin.library.*
-import org.jetbrains.kotlin.library.impl.createKotlinLibraryComponents
-import org.jetbrains.kotlin.library.metadata.resolver.KotlinLibraryResolveResult
-import org.jetbrains.kotlin.library.metadata.resolver.impl.libraryResolver
-import org.jetbrains.kotlin.util.Logger
-
-class JvmLibraryResolver(
- directLibs: List<String>,
- distributionKlib: String?,
- skipCurrentDir: Boolean,
- logger: Logger
-) : KotlinLibraryProperResolverWithAttributes<KotlinLibrary>(
- directLibs = directLibs,
- distributionKlib = distributionKlib,
- skipCurrentDir = skipCurrentDir,
- logger = logger,
- knownIrProviders = emptyList()
-) {
- // Stick with the default KotlinLibrary for now.
- override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKotlinLibraryComponents(file, isDefault)
-
- // We do not need stdlib in klib form.
- override fun isProvidedByDefault(unresolved: UnresolvedLibrary): Boolean =
- unresolved.path == KOTLIN_NATIVE_STDLIB_NAME || unresolved.path == KOTLIN_JS_STDLIB_NAME
-}
-
-// TODO: This is a temporary set of library resolver policies for jvm compiler.
-fun jvmResolveLibraries(libraries: List<String>, logger: Logger): KotlinLibraryResolveResult {
- val unresolvedLibraries = libraries.map { RequiredUnresolvedLibrary(it) }
- val libraryAbsolutePaths = libraries.map { File(it).absolutePath }
- // Configure the resolver to only work with absolute paths for now.
- val libraryResolver = JvmLibraryResolver(
- directLibs = libraryAbsolutePaths,
- distributionKlib = null,
- skipCurrentDir = false,
- logger = logger
- ).libraryResolver()
- val resolvedLibraries =
- libraryResolver.resolveWithDependencies(
- unresolvedLibraries = unresolvedLibraries,
- noStdLib = true,
- noDefaultLibs = true,
- noEndorsedLibs = true
- )
- return resolvedLibraries
-}
diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/loadJvmKlibs.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/loadJvmKlibs.kt
new file mode 100644
index 0000000..34b24ab
--- /dev/null
+++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/loadJvmKlibs.kt
@@ -0,0 +1,18 @@
+package org.jetbrains.kotlin.ir.backend.jvm
+
+import org.jetbrains.kotlin.backend.common.LoadedKlibs
+import org.jetbrains.kotlin.backend.common.reportLoadingProblemsIfAny
+import org.jetbrains.kotlin.config.CompilerConfiguration
+import org.jetbrains.kotlin.config.klibPaths
+import org.jetbrains.kotlin.library.loader.KlibLoader
+
+/**
+ * This is the entry point to load Kotlin/JVM experimental KLIBs.
+ *
+ * @param configuration The current compiler configuration.
+ */
+fun loadJvmKlibs(configuration: CompilerConfiguration): LoadedKlibs {
+ val result = KlibLoader { libraryPaths(configuration.klibPaths) }.load()
+ result.reportLoadingProblemsIfAny(configuration, allAsErrors = true)
+ return LoadedKlibs(all = result.librariesStdlibFirst)
+}
diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt
index 7957bb5..fee08fa 100644
--- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt
+++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt
@@ -16,7 +16,6 @@
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
-import org.jetbrains.kotlin.cli.common.messages.getLogger
import org.jetbrains.kotlin.cli.common.output.writeAllTo
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
@@ -25,7 +24,6 @@
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
-import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.fir.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.FirTestSessionFactoryHelper
@@ -33,7 +31,8 @@
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
import org.jetbrains.kotlin.fir.extensions.FirAnalysisHandlerExtension
-import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
+import org.jetbrains.kotlin.ir.backend.jvm.loadJvmKlibs
+import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
@@ -138,15 +137,13 @@
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace
): Pair<GenerationState, BindingContext> {
- val resolvedKlibs = configuration.get(JVMConfigurationKeys.KLIB_PATHS)?.let { klibPaths ->
- jvmResolveLibraries(klibPaths, configuration.getLogger(treatWarningsAsErrors = true))
- }
+ val klibs: List<KotlinLibrary> = loadJvmKlibs(configuration).all
@Suppress("DEPRECATION")
val analysisResult =
JvmResolveUtil.analyzeAndCheckForErrors(
project, files, configuration, packagePartProvider, trace,
- klibList = resolvedKlibs?.getFullList() ?: emptyList()
+ klibList = klibs
)
analysisResult.throwIfError()