Fix DependencyResolver to properly handle toolchain dependencies for output files.

Output files may have toolchains when an aspect is evaluated over the output file.

PiperOrigin-RevId: 448492867
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 b0bced2..eb7f09d 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
@@ -225,6 +225,7 @@
             attributeMap,
             node.getConfiguration());
       }
+      addToolchainDeps(toolchainContexts, outgoingLabels);
     } else if (target instanceof InputFile) {
       visitTargetVisibility(node, outgoingLabels);
     } else if (target instanceof EnvironmentGroup) {
@@ -525,6 +526,12 @@
           rule.getPackage().getDefaultRestrictedTo());
     }
 
+    addToolchainDeps(toolchainContexts, outgoingLabels);
+  }
+
+  private void addToolchainDeps(
+      ToolchainCollection<ToolchainContext> toolchainContexts,
+      OrderedSetMultimap<DependencyKind, Label> outgoingLabels) {
     if (toolchainContexts != null) {
       for (Map.Entry<String, ToolchainContext> entry :
           toolchainContexts.getContextMap().entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
index 3f1a64c..da6ecbd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
@@ -86,8 +86,6 @@
     ImmutableMap<ToolchainTypeInfo, ToolchainInfo> toolchains = toolchainsBuilder.buildOrThrow();
 
     // Verify that all mandatory toolchain type requirements are present.
-    // TODO(b/232128775): Re-enable once aspect toolchain merging is fixed.
-    /*
     for (ToolchainTypeRequirement toolchainTypeRequirement :
         unloadedToolchainContext.toolchainTypes()) {
       if (toolchainTypeRequirement.mandatory()) {
@@ -99,7 +97,6 @@
         }
       }
     }
-     */
 
     return new AutoValue_ResolvedToolchainContext(
         // super:
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java
index 8fddca5..b8197d2 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java
@@ -30,7 +30,6 @@
 import com.google.devtools.build.lib.skyframe.ToolchainException;
 import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext;
 import com.google.devtools.build.lib.skyframe.UnloadedToolchainContextImpl;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -89,9 +88,7 @@
         .isEqualTo("baz");
   }
 
-  // TODO(b/232128775): Re-enable once aspect toolchain merging is fixed.
   @Test
-  @Ignore("b/232128775")
   public void load_mandatory_missing() throws Exception {
     ToolchainContextKey toolchainContextKey =
         ToolchainContextKey.key()
diff --git a/src/test/shell/integration/toolchain_test.sh b/src/test/shell/integration/toolchain_test.sh
index bf19337..fdd8737 100755
--- a/src/test/shell/integration/toolchain_test.sh
+++ b/src/test/shell/integration/toolchain_test.sh
@@ -143,6 +143,7 @@
     implementation = _impl,
     attrs = {},
     toolchains = ['//${pkg}/toolchain:${toolchain_name}'],
+    apply_to_generating_rules = True,
 )
 EOF
 }
@@ -727,8 +728,7 @@
   bazel build \
     --aspects //${pkg}/toolchain:aspect_use_toolchain.bzl%use_toolchain \
     "//${pkg}/demo:use.log" &> $TEST_log || fail "Build failed"
-  # TODO(b/232128775): Re-enable once aspect toolchain merging is fixed.
-  #expect_log 'Using toolchain in aspect: rule message: "bar from demo", toolchain extra_str: "foo from test_toolchain"'
+  expect_log 'Using toolchain in aspect: rule message: "bar from demo", toolchain extra_str: "foo from test_toolchain"'
 }
 
 function test_toolchain_use_in_aspect_non_required_toolchain {