Demote fatal error to warning on unresolved libraries mentioned in Klib's manifest 'depends' for metadata compilation

^KT-46107
This commit is contained in:
sebastian.sellmair
2021-04-15 13:23:59 +02:00
committed by Space
parent 95a1a4e66a
commit 22ea5c7de4
6 changed files with 84 additions and 37 deletions
@@ -25,11 +25,12 @@ import org.jetbrains.kotlin.library.resolver.KotlinResolvedLibrary
import org.jetbrains.kotlin.library.resolver.LibraryOrder
import org.jetbrains.kotlin.util.WithLogger
fun <L: KotlinLibrary> SearchPathResolver<L>.libraryResolver()
= KotlinLibraryResolverImpl<L>(this)
fun <L: KotlinLibrary> SearchPathResolver<L>.libraryResolver(resolveManifestDependenciesLenient: Boolean = false)
= KotlinLibraryResolverImpl<L>(this, resolveManifestDependenciesLenient)
class KotlinLibraryResolverImpl<L: KotlinLibrary>(
override val searchPathResolver: SearchPathResolver<L>
class KotlinLibraryResolverImpl<L: KotlinLibrary> internal constructor(
override val searchPathResolver: SearchPathResolver<L>,
val resolveManifestDependenciesLenient: Boolean
): KotlinLibraryResolver<L>, WithLogger by searchPathResolver {
override fun resolveWithDependencies(
@@ -56,7 +57,7 @@ class KotlinLibraryResolverImpl<L: KotlinLibrary>(
): List<KotlinLibrary> {
val userProvidedLibraries = unresolvedLibraries.asSequence()
.map { searchPathResolver.resolve(it) }
.mapNotNull { searchPathResolver.resolve(it) }
.toList()
val defaultLibraries = searchPathResolver.defaultLinks(noStdLib, noDefaultLibs, noEndorsedLibs)
@@ -115,10 +116,10 @@ class KotlinLibraryResolverImpl<L: KotlinLibrary>(
var newDependencies = rootLibraries
do {
newDependencies = newDependencies.map { library: KotlinResolvedLibraryImpl ->
library.library.unresolvedDependencies.asSequence()
library.library.unresolvedDependencies(resolveManifestDependenciesLenient).asSequence()
.filterNot { searchPathResolver.isProvidedByDefault(it) }
.map { KotlinResolvedLibraryImpl(searchPathResolver.resolve(it)) }
.mapNotNull { KotlinResolvedLibraryImpl(searchPathResolver.resolve(it) ?: return@mapNotNull null) }
.map { resolved ->
val absoluteFile = resolved.library.libraryFile.absoluteFile
if (absoluteFile in cache) {