Add the ToolchainContextKey to dependency chain classes.

TODOs mark where this will be set and used.

Part of work on toolchain transitions, #10523.

Closes #11575.

PiperOrigin-RevId: 315766282
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 796e733..dd89c11 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -408,6 +408,7 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:package_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sane_analysis_exception",
+        "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_key",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:workspace_status_value",
@@ -701,6 +702,7 @@
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_key",
+        "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
@@ -715,7 +717,9 @@
         ":config/transitions/configuration_transition",
         ":dependency",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
+        "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
         "//third_party:auto_value",
+        "//third_party:jsr305",
     ],
 )
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
index 449a425..0b07692 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
@@ -21,6 +21,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.AspectDescriptor;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
+import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
 import javax.annotation.Nullable;
 
 /**
@@ -68,6 +69,13 @@
     /** Sets the keys of a configuration transition. */
     public abstract Builder setTransitionKeys(ImmutableList<String> keys);
 
+    /**
+     * Sets the {@link ToolchainContextKey} that this dependency should use for toolchain
+     * resolution.
+     */
+    @Nullable
+    public abstract Builder setToolchainContextKey(ToolchainContextKey toolchainContextKey);
+
     // Not public.
     abstract Dependency autoBuild();
 
@@ -141,11 +149,20 @@
    */
   public abstract ImmutableList<String> getTransitionKeys();
 
+  /**
+   * Returns the {@link ToolchainContextKey} that this dependency should use for toolchain
+   * resolution.
+   */
+  @Nullable
+  public abstract ToolchainContextKey getToolchainContextKey();
+
   /** Returns the ConfiguredTargetKey needed to fetch this dependency. */
   public ConfiguredTargetKey getConfiguredTargetKey() {
-    return ConfiguredTargetKey.builder()
-        .setLabel(getLabel())
-        .setConfiguration(getConfiguration())
-        .build();
+    ConfiguredTargetKey.Builder configuredTargetKeyBuilder =
+        ConfiguredTargetKey.builder().setLabel(getLabel()).setConfiguration(getConfiguration());
+    if (getToolchainContextKey() != null) {
+      configuredTargetKeyBuilder.setToolchainContextKey(getToolchainContextKey());
+    }
+    return configuredTargetKeyBuilder.build();
   }
 }
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 61e7c12..7750772 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
@@ -16,6 +16,8 @@
 import com.google.auto.value.AutoValue;
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
+import javax.annotation.Nullable;
 
 /**
  * Information about a dependency, including the label and configuration transition. This will be
@@ -36,6 +38,13 @@
     /** Sets the aspects that are propagating to the target this dependency points to. */
     Builder setAspects(AspectCollection aspectCollection);
 
+    /**
+     * Sets the {@link ToolchainContextKey} that this dependency should use for toolchain
+     * resolution.
+     */
+    @Nullable
+    Builder setToolchainContextKey(ToolchainContextKey toolchainContextKey);
+
     /** Returns the new instance. */
     DependencyKey build();
   }
@@ -54,7 +63,16 @@
   /** Returns the aspects that are propagating to the target this dependency points to. */
   public abstract AspectCollection getAspects();
 
+  /**
+   * Returns the {@link ToolchainContextKey} that this dependency should use for toolchain
+   * resolution.
+   */
+  @Nullable
+  public abstract ToolchainContextKey getToolchainContextKey();
+
   public Dependency.Builder getDependencyBuilder() {
-    return Dependency.builder().setLabel(getLabel());
+    return Dependency.builder()
+        .setLabel(getLabel())
+        .setToolchainContextKey(getToolchainContextKey());
   }
 }
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 6137627..015aff9 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
@@ -55,6 +55,7 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
 import java.util.ArrayList;
@@ -83,6 +84,9 @@
 
     abstract ImmutableList<Aspect> getPropagatingAspects();
 
+    @Nullable
+    abstract ToolchainContextKey getToolchainContextKey();
+
     /** A Builder to create instances of PartiallyResolvedDependency. */
     @AutoValue.Builder
     abstract static class Builder {
@@ -92,6 +96,9 @@
 
       abstract Builder setPropagatingAspects(List<Aspect> propagatingAspects);
 
+      @Nullable
+      abstract Builder setToolchainContextKey(ToolchainContextKey toolchainContextKey);
+
       abstract PartiallyResolvedDependency build();
     }
 
@@ -101,7 +108,9 @@
     }
 
     public DependencyKey.Builder getDependencyKeyBuilder() {
-      return DependencyKey.builder().setLabel(getLabel());
+      return DependencyKey.builder()
+          .setLabel(getLabel())
+          .setToolchainContextKey(getToolchainContextKey());
     }
   }
 
@@ -273,8 +282,9 @@
             TOOLCHAIN_DEPENDENCY,
             PartiallyResolvedDependency.builder()
                 .setLabel(toLabel)
-                // TODO(jcater): Replace this with a proper transition for the execution platform.
+                // TODO(#10523): Replace this with a proper transition for the execution platform.
                 .setTransition(HostTransition.INSTANCE)
+                // TODO(#10523): Set the toolchainContextKey from ToolchainCollection.
                 .setPropagatingAspects(ImmutableList.of())
                 .build());
         continue;