diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index b71ee31d59c..314c5b1a144 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -52,7 +52,6 @@ import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.impl.BuiltInsPlatform import org.jetbrains.kotlin.library.impl.buildKotlinLibrary import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult -import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.progress.IncrementalNextRoundException import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus @@ -380,15 +379,10 @@ private class ModulesStructure( private val friendDependencies: List ) { val moduleDependencies: Map> = run { - val result = mutableMapOf>() - - allDependencies.forEach { klib, _ -> - val dependencies = allDependencies.filterRoots { - it.library == klib - }.getFullList(TopologicalLibraryOrder) - result.put(klib, dependencies.minus(klib)) - } - result + val transitives = allDependencies.getFullResolvedList() + transitives.associate { klib -> + klib.library to klib.resolvedDependencies.map { d -> d.library } + }.toMap() } val builtInsDep = allDependencies.getFullList().find { it.isBuiltIns } diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/KotlinLibraryResolver.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/KotlinLibraryResolver.kt index 64d2d89399b..cef3a418b86 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/KotlinLibraryResolver.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/KotlinLibraryResolver.kt @@ -23,7 +23,8 @@ interface KotlinLibraryResolveResult { fun filterRoots(predicate: (KotlinResolvedLibrary) -> Boolean): KotlinLibraryResolveResult - fun getFullList(order: LibraryOrder? = null): List + fun getFullList(order: LibraryOrder? = null): List = getFullResolvedList(order).map { it.library } + fun getFullResolvedList(order: LibraryOrder? = null): List fun forEach(action: (KotlinLibrary, PackageAccessHandler) -> Unit) } diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinLibraryResolverImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinLibraryResolverImpl.kt index c62969d54de..53fb52f6aff 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinLibraryResolverImpl.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinLibraryResolverImpl.kt @@ -143,30 +143,29 @@ class KotlinLibraryResolverResultImpl( private val roots: List ): KotlinLibraryResolveResult { - private val all: List by lazy { - val result = mutableSetOf().also { it.addAll(roots) } + private val all: List + by lazy { + val result = mutableSetOf().also { it.addAll(roots) } - var newDependencies = result.toList() - do { - newDependencies = newDependencies - .map { it -> it.resolvedDependencies }.flatten() + var newDependencies = result.toList() + do { + newDependencies = newDependencies + .map { it.resolvedDependencies }.flatten() .filter { it !in result } - result.addAll(newDependencies) - } while (newDependencies.isNotEmpty()) + result.addAll(newDependencies) + } while (newDependencies.isNotEmpty()) - result.toList() - } + result.toList() + } override fun filterRoots(predicate: (KotlinResolvedLibrary) -> Boolean) = KotlinLibraryResolverResultImpl(roots.filter(predicate)) - override fun getFullList(order: LibraryOrder?) = (order?.invoke(all) ?: all).asPlain() + override fun getFullResolvedList(order: LibraryOrder?) = (order?.invoke(all) ?: all) override fun forEach(action: (KotlinLibrary, PackageAccessHandler) -> Unit) { all.forEach { action(it.library, it) } } - private fun List.asPlain() = map { it.library } - override fun toString() = "roots=$roots, all=$all" }