Don't rely on the current project in dep-resolution if module is given

This commit is contained in:
Sergey Igushkin
2021-03-19 18:25:22 +03:00
parent f029179fe0
commit 470103bfac
3 changed files with 9 additions and 8 deletions
@@ -31,12 +31,11 @@ internal fun configurationToResolveMetadataDependencies(project: Project, reques
class GradleKotlinDependencyGraphResolver( class GradleKotlinDependencyGraphResolver(
private val project: Project,
private val moduleResolver: ModuleDependencyResolver private val moduleResolver: ModuleDependencyResolver
) : KotlinDependencyGraphResolver { ) : KotlinDependencyGraphResolver {
private fun configurationToResolve(requestingModule: KotlinModule): Configuration = private fun configurationToResolve(requestingModule: KotlinGradleModule): Configuration =
configurationToResolveMetadataDependencies(project, requestingModule) configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
override fun resolveDependencyGraph(requestingModule: KotlinModule): DependencyGraphResolution { override fun resolveDependencyGraph(requestingModule: KotlinModule): DependencyGraphResolution {
if (requestingModule !is KotlinGradleModule) if (requestingModule !is KotlinGradleModule)
@@ -21,15 +21,17 @@ import org.jetbrains.kotlin.project.model.*
import java.util.ArrayDeque import java.util.ArrayDeque
class GradleModuleDependencyResolver( class GradleModuleDependencyResolver(
private val project: Project,
private val projectStructureMetadataModuleBuilder: ProjectStructureMetadataModuleBuilder, private val projectStructureMetadataModuleBuilder: ProjectStructureMetadataModuleBuilder,
private val projectModuleBuilder: GradleProjectModuleBuilder private val projectModuleBuilder: GradleProjectModuleBuilder
) : ModuleDependencyResolver { ) : ModuleDependencyResolver {
private fun configurationToResolve(requestingModule: KotlinModule): Configuration = private fun configurationToResolve(requestingModule: KotlinGradleModule): Configuration =
configurationToResolveMetadataDependencies(project, requestingModule) configurationToResolveMetadataDependencies(requestingModule.project, requestingModule)
override fun resolveDependency(requestingModule: KotlinModule, moduleDependency: KotlinModuleDependency): KotlinModule? { override fun resolveDependency(requestingModule: KotlinModule, moduleDependency: KotlinModuleDependency): KotlinModule? {
require(requestingModule is KotlinGradleModule)
val project = requestingModule.project
val allComponents = configurationToResolve(requestingModule).incoming.resolutionResult.allComponents val allComponents = configurationToResolve(requestingModule).incoming.resolutionResult.allComponents
// TODO: optimize O(n) search, store the resolved components with dependency keys? // TODO: optimize O(n) search, store the resolved components with dependency keys?
val component = allComponents.find { it.id.matchesModuleDependency(moduleDependency) } val component = allComponents.find { it.id.matchesModuleDependency(moduleDependency) }
@@ -33,10 +33,10 @@ internal class FragmentGranularMetadataResolver(
private val metadataModuleBuilder = ProjectStructureMetadataModuleBuilder() private val metadataModuleBuilder = ProjectStructureMetadataModuleBuilder()
private val projectModuleBuilder = GradleProjectModuleBuilder(true) private val projectModuleBuilder = GradleProjectModuleBuilder(true)
private val moduleResolver = GradleModuleDependencyResolver(project, metadataModuleBuilder, projectModuleBuilder) private val moduleResolver = GradleModuleDependencyResolver(metadataModuleBuilder, projectModuleBuilder)
private val variantResolver = GradleModuleVariantResolver(project) private val variantResolver = GradleModuleVariantResolver(project)
private val fragmentResolver = DefaultModuleFragmentsResolver(variantResolver) private val fragmentResolver = DefaultModuleFragmentsResolver(variantResolver)
private val dependencyGraphResolver = GradleKotlinDependencyGraphResolver(project, moduleResolver) private val dependencyGraphResolver = GradleKotlinDependencyGraphResolver(moduleResolver)
private fun doResolveMetadataDependencies(): Iterable<MetadataDependencyResolution> { private fun doResolveMetadataDependencies(): Iterable<MetadataDependencyResolution> {
val configurationToResolve = configurationToResolveMetadataDependencies(project, requestingFragment.containingModule) val configurationToResolve = configurationToResolveMetadataDependencies(project, requestingFragment.containingModule)