From 1f0089c5de4f61fe10c86bc3fdff47ca75cd6ac6 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 14 Apr 2021 18:30:13 +0300 Subject: [PATCH] Refactor the dependency graph resolver to be more readable --- .../mpp/pm20/DependencyGraphResolver.kt | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt index f6148e1d8a1..6227fbba60b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/DependencyGraphResolver.kt @@ -48,23 +48,21 @@ class GradleKotlinDependencyGraphResolver( val nodeByModuleId = mutableMapOf() - fun nodeFromComponent(component: ResolvedComponentResult, isRoot: Boolean /*refactor me*/): GradleDependencyGraphNode { - val id = component.toSingleModuleIdentifier() - return nodeByModuleId.getOrPut(id) { - val module = if (isRoot) - requestingModule - else moduleResolver.resolveDependency(requestingModule, component.toModuleDependency()) - .takeIf { component !in excludeLegacyMetadataModulesFromResult } - ?: buildSyntheticModule(component, component.variants.singleOrNull()?.displayName ?: "default") + fun getKotlinModuleFromComponentResult(component: ResolvedComponentResult): KotlinModule = + moduleResolver.resolveDependency(requestingModule, component.toModuleDependency()) + ?: buildSyntheticPlainModule(component, component.variants.singleOrNull()?.displayName ?: "default") + fun nodeFromModule(componentResult: ResolvedComponentResult, kotlinModule: KotlinModule): GradleDependencyGraphNode { + val id = kotlinModule.moduleIdentifier + return nodeByModuleId.getOrPut(id) { val metadataSourceComponent = - (module as? ExternalImportedKotlinModule) + (kotlinModule as? ExternalImportedKotlinModule) ?.takeIf { it.hasLegacyMetadataModule } - ?.let { (component.dependencies.singleOrNull() as? ResolvedDependencyResult)?.selected } - ?: component + ?.let { (componentResult.dependencies.singleOrNull() as? ResolvedDependencyResult)?.selected } + ?: componentResult val dependenciesRequestedByModule = - module.fragments.flatMap { fragment -> fragment.declaredModuleDependencies.map { it.moduleIdentifier } }.toSet() + kotlinModule.fragments.flatMap { fragment -> fragment.declaredModuleDependencies.map { it.moduleIdentifier } }.toSet() val resolvedComponentDependencies = metadataSourceComponent.dependencies .filterIsInstance() @@ -74,15 +72,18 @@ class GradleKotlinDependencyGraphResolver( .flatMap { dependency -> dependency.requested.toModuleIdentifiers().map { id -> id to dependency.selected } } .toMap() - val fragmentDependencies = module.fragments.associateWith { it.declaredModuleDependencies } + val fragmentDependencies = kotlinModule.fragments.associateWith { it.declaredModuleDependencies } val nodeDependenciesMap = fragmentDependencies.mapValues { (_, deps) -> - deps.mapNotNull { resolvedComponentDependencies[it.moduleIdentifier] }.map { nodeFromComponent(it, isRoot = false) } + deps.mapNotNull { resolvedComponentDependencies[it.moduleIdentifier] }.map { + val dependencyModule = getKotlinModuleFromComponentResult(it) + nodeFromModule(it, dependencyModule) + } } GradleDependencyGraphNode( - module, - component, + kotlinModule, + componentResult, metadataSourceComponent, nodeDependenciesMap ) @@ -91,7 +92,7 @@ class GradleKotlinDependencyGraphResolver( return GradleDependencyGraph( requestingModule, - nodeFromComponent(configurationToResolve(requestingModule).incoming.resolutionResult.root, isRoot = true) + nodeFromModule(configurationToResolve(requestingModule).incoming.resolutionResult.root, requestingModule) ) } }