From 79c71405140f67b3b608b537ad90924fba1becf8 Mon Sep 17 00:00:00 2001 From: Louis Jacomet Date: Fri, 5 Jul 2019 14:54:20 +0200 Subject: [PATCH] Special case for deferred selector When a dependency activates a pending constraint, do not defer selection if the pending constraint comes from a virtual platform. Because of their special aspects, virtual platforms really need to be handled in line each time. Fixes #9882 --- .../builder/DefaultPendingDependenciesVisitor.java | 2 +- .../graph/builder/PendingDependencies.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/DefaultPendingDependenciesVisitor.java b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/DefaultPendingDependenciesVisitor.java index 6d2030b41783..2c174a8a534d 100644 --- a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/DefaultPendingDependenciesVisitor.java +++ b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/DefaultPendingDependenciesVisitor.java @@ -68,7 +68,7 @@ private boolean markNoLongerPending(PendingDependencies pendingDependencies) { noLongerPending = Lists.newLinkedList(); } noLongerPending.add(pendingDependencies); - activatedPending = true; + activatedPending = pendingDependencies.shouldReportActivatePending(); } pendingDependencies.increaseHardEdgeCount(); return activatedPending; diff --git a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/PendingDependencies.java b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/PendingDependencies.java index 5d2a0e2544a7..1f2a70ae9774 100644 --- a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/PendingDependencies.java +++ b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolveengine/graph/builder/PendingDependencies.java @@ -24,11 +24,13 @@ public class PendingDependencies { private final ModuleIdentifier moduleIdentifier; private final Set affectedComponents; private int hardEdges; + private boolean reportActivePending; PendingDependencies(ModuleIdentifier moduleIdentifier) { this.moduleIdentifier = moduleIdentifier; this.affectedComponents = Sets.newLinkedHashSet(); this.hardEdges = 0; + this.reportActivePending = true; } ModuleIdentifier getModuleIdentifier() { @@ -40,6 +42,9 @@ void addNode(NodeState state) { throw new IllegalStateException("Cannot add a pending node for a dependency which is not pending"); } affectedComponents.add(state); + if (state.getComponent().getModule().isVirtualPlatform()) { + reportActivePending = false; + } } void turnIntoHardDependencies() { @@ -47,6 +52,7 @@ void turnIntoHardDependencies() { affectedComponent.prepareForConstraintNoLongerPending(moduleIdentifier); } affectedComponents.clear(); + reportActivePending = true; } public boolean isPending() { @@ -65,4 +71,8 @@ void decreaseHardEdgeCount() { assert hardEdges > 0 : "Cannot remove a hard edge when none recorded"; hardEdges--; } + + public boolean shouldReportActivatePending() { + return reportActivePending; + } }