From ebc459963bcd6526a54f6fdd2fb7024c16695fdf Mon Sep 17 00:00:00 2001 From: John Cater Date: Wed, 10 Jun 2020 13:26:32 -0700 Subject: [PATCH] Create builders initialized from the prior stage in dependency analysis. Part of work on toolchain transitions, #10523. Closes #11574. PiperOrigin-RevId: 315756199 --- .../google/devtools/build/lib/analysis/BUILD | 1 + .../build/lib/analysis/DependencyKey.java | 4 +++ .../lib/analysis/DependencyResolver.java | 26 +++++++++++-------- .../config/ConfigurationResolver.java | 2 +- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD index da5080b321f4f7..796e733fe271f5 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD +++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD @@ -713,6 +713,7 @@ java_library( deps = [ ":aspect_collection", ":config/transitions/configuration_transition", + ":dependency", "//src/main/java/com/google/devtools/build/lib/cmdline", "//third_party:auto_value", ], diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java index f7ba38174ebf4c..61e7c12b9e22a5 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java @@ -53,4 +53,8 @@ public static Builder builder() { /** Returns the aspects that are propagating to the target this dependency points to. */ public abstract AspectCollection getAspects(); + + public Dependency.Builder getDependencyBuilder() { + return Dependency.builder().setLabel(getLabel()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index c9612dd0bf6849..613762706b7fe9 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -99,6 +99,10 @@ static Builder builder() { return new AutoValue_DependencyResolver_PartiallyResolvedDependency.Builder() .setPropagatingAspects(ImmutableList.of()); } + + public DependencyKey.Builder getDependencyKeyBuilder() { + return DependencyKey.builder().setLabel(getLabel()); + } } /** @@ -198,8 +202,7 @@ public final OrderedSetMultimap dependentNodeMap( OrderedSetMultimap outgoingLabels = OrderedSetMultimap.create(); // TODO(bazel-team): Figure out a way to implement the below (and partiallyResolveDependencies) - // using - // LabelVisitationUtils. + // using LabelVisitationUtils. Rule fromRule = null; ConfiguredAttributeMapper attributeMap = null; if (target instanceof OutputFile) { @@ -366,9 +369,9 @@ private OrderedSetMultimap fullyResolveDependenci for (Map.Entry entry : partiallyResolvedDeps.entries()) { - PartiallyResolvedDependency dep = entry.getValue(); + PartiallyResolvedDependency partiallyResolvedDependency = entry.getValue(); - Target toTarget = targetMap.get(dep.getLabel()); + Target toTarget = targetMap.get(partiallyResolvedDependency.getLabel()); if (toTarget == null) { // Dependency pointing to non-existent target. This error was reported in getTargets(), so // we can just ignore this dependency. @@ -377,18 +380,19 @@ private OrderedSetMultimap fullyResolveDependenci ConfigurationTransition transition = TransitionResolver.evaluateTransition( - originalConfiguration, dep.getTransition(), toTarget, trimmingTransitionFactory); + originalConfiguration, + partiallyResolvedDependency.getTransition(), + toTarget, + trimmingTransitionFactory); AspectCollection requiredAspects = - filterPropagatingAspects(dep.getPropagatingAspects(), toTarget); + filterPropagatingAspects(partiallyResolvedDependency.getPropagatingAspects(), toTarget); + DependencyKey.Builder dependencyKeyBuilder = + partiallyResolvedDependency.getDependencyKeyBuilder(); outgoingEdges.put( entry.getKey(), - DependencyKey.builder() - .setLabel(dep.getLabel()) - .setTransition(transition) - .setAspects(requiredAspects) - .build()); + dependencyKeyBuilder.setTransition(transition).setAspects(requiredAspects).build()); } return outgoingEdges; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java index 242cdd0ce089a8..81f311eaa3cd76 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java @@ -178,7 +178,7 @@ private ImmutableList resolveConfiguration( DependencyKind dependencyKind, DependencyKey dependencyKey) throws DependencyEvaluationException, ValueMissingException, InterruptedException { - Dependency.Builder dependencyBuilder = Dependency.builder().setLabel(dependencyKey.getLabel()); + Dependency.Builder dependencyBuilder = dependencyKey.getDependencyBuilder(); ConfigurationTransition transition = dependencyKey.getTransition(); if (transition == NullTransition.INSTANCE) {