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()