Create builders initialized from the prior stage in dependency analysis.

Part of work on toolchain transitions, #10523.

Closes #11574.

PiperOrigin-RevId: 315756199
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 da5080b..796e733 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 @@
     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 f7ba381..61e7c12 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 @@
 
   /** 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 c9612dd..6137627 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 @@
       return new AutoValue_DependencyResolver_PartiallyResolvedDependency.Builder()
           .setPropagatingAspects(ImmutableList.of());
     }
+
+    public DependencyKey.Builder getDependencyKeyBuilder() {
+      return DependencyKey.builder().setLabel(getLabel());
+    }
   }
 
   /**
@@ -198,8 +202,7 @@
     OrderedSetMultimap<DependencyKind, Label> 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 @@
 
     for (Map.Entry<DependencyKind, PartiallyResolvedDependency> 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 @@
 
       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 242cdd0..81f311e 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 @@
       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) {