Replace BuildConfiguration.Fragment#collectExecutables() with a #getShellExecutable() method.

That's all it was used for anyway.

--
MOS_MIGRATED_REVID=133824769
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
index 1890486..eb4208a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java
@@ -306,6 +306,6 @@
   private PathFragment shellPath(Map<String, String> executionInfo) {
     // Use vanilla /bin/bash for actions running on mac machines.
     return executionInfo.containsKey("requires-darwin")
-        ? new PathFragment("/bin/bash") : ruleContext.getConfiguration().getShExecutable();
+        ? new PathFragment("/bin/bash") : ruleContext.getConfiguration().getShellExecutable();
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index 6e34e0f..988e1d8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -568,7 +568,7 @@
       Iterable<String> arguments = argumentsBuilder.build();
       // Check to see if we need to use param file.
       Artifact paramsFile = ParamFileHelper.getParamsFileMaybe(
-          buildExecutableArgs(configuration.getShExecutable()),
+          buildExecutableArgs(configuration.getShellExecutable()),
           arguments,
           commandLine,
           paramFileInfo,
@@ -589,7 +589,7 @@
           buildSpawnAction(
               owner,
               configuration.getLocalShellEnvironment(),
-              configuration.getShExecutable(),
+              configuration.getShellExecutable(),
               paramsFile,
               paramFileWriteAction));
       if (paramFileWriteAction != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index 272582d..8f01d0d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -198,11 +198,13 @@
     }
 
     /**
-     * Add mappings from generally available tool names (like "sh") to their paths
-     * that actions can access.
+     * Returns the shell to be used.
+     *
+     * <p>Each configuration instance must have at most one fragment that returns non-null.
      */
     @SuppressWarnings("unused")
-    public void defineExecutables(ImmutableMap.Builder<String, PathFragment> builder) {
+    public PathFragment getShellExecutable() {
+      return null;
     }
 
     /**
@@ -1065,7 +1067,7 @@
   private final boolean actionsEnabled;
 
   // TODO(bazel-team): Move this to a configuration fragment.
-  private final PathFragment shExecutable;
+  private final PathFragment shellExecutable;
 
   /**
    * The global "make variables" such as "$(TARGET_CPU)"; these get applied to all rules analyzed in
@@ -1285,7 +1287,7 @@
         ? options.outputDirectoryName : mnemonic;
     this.platformName = buildPlatformName();
 
-    this.shExecutable = collectExecutables().get("sh");
+    this.shellExecutable = computeShellExecutable();
 
     this.outputRoots = outputRoots != null
         ? outputRoots
@@ -2066,8 +2068,8 @@
   /**
    * Returns the path to sh.
    */
-  public PathFragment getShExecutable() {
-    return shExecutable;
+  public PathFragment getShellExecutable() {
+    return shellExecutable;
   }
 
   /**
@@ -2366,12 +2368,17 @@
   /**
    * Collects executables defined by fragments.
    */
-  private ImmutableMap<String, PathFragment> collectExecutables() {
-    ImmutableMap.Builder<String, PathFragment> builder = new ImmutableMap.Builder<>();
+  private PathFragment computeShellExecutable() {
+    PathFragment result = null;
+
     for (Fragment fragment : fragments.values()) {
-      fragment.defineExecutables(builder);
+      if (fragment.getShellExecutable() != null) {
+        Verify.verify(result == null);
+        result = fragment.getShellExecutable();
+      }
     }
-    return builder.build();
+
+    return result;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java
index 5567f08..a09d9ba 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java
@@ -56,26 +56,24 @@
   }
 
   @Override
-  public void defineExecutables(ImmutableMap.Builder<String, PathFragment> builder) {
+  public PathFragment getShellExecutable() {
     if (OS.getCurrent() == OS.WINDOWS) {
       String path = System.getenv("BAZEL_SH");
       if (path != null) {
-        builder.put("sh", new PathFragment(path));
+        return new PathFragment(path);
       } else {
-        builder.put("sh", new PathFragment("c:/tools/msys64/usr/bin/bash.exe"));
+        return new PathFragment("c:/tools/msys64/usr/bin/bash.exe");
       }
-      return;
     }
     if (OS.getCurrent() == OS.FREEBSD) {
       String path = System.getenv("BAZEL_SH");
       if (path != null) {
-        builder.put("sh", new PathFragment(path));
+        return  new PathFragment(path);
       } else {
-        builder.put("sh", new PathFragment("/usr/local/bin/bash"));
+        return new PathFragment("/usr/local/bin/bash");
       }
-      return;
     }
-    builder.put("sh", new PathFragment("/bin/bash"));
+    return new PathFragment("/bin/bash");
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
index bb4826e..db3ab65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
@@ -411,7 +411,7 @@
 
       case DYNAMIC_LIBRARY:
         if (interfaceOutput != null) {
-          argv.add(configuration.getShExecutable().getPathString());
+          argv.add(configuration.getShellExecutable().getPathString());
           argv.add("-c");
           argv.add(
               "build_iface_so=\"$0\"; impl=\"$1\"; iface=\"$2\"; cmd=\"$3\"; shift 3; "
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
index 19bfdb3..db3f583 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
@@ -549,7 +549,7 @@
   }
 
   public PathFragment getShExecutable() {
-    return configuration.getShExecutable();
+    return configuration.getShellExecutable();
   }
 
   public ImmutableMap<String, String> getLocalShellEnvironment() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java
index ce9e08d..9e26dfd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestStrategy.java
@@ -219,7 +219,7 @@
       args.addAll(execSettings.getRunUnder().getOptions());
       args.addAll(execArgs);
     } else {
-      args.add(testAction.getConfiguration().getShExecutable().getPathString());
+      args.add(testAction.getConfiguration().getShellExecutable().getPathString());
       args.add("-c");
 
       String runUnderCommand = ShellEscaper.escapeString(execSettings.getRunUnder().getCommand());
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index 26dda27..ca2b04a 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -275,11 +275,11 @@
           runUnderValue += " " + ShellEscaper.escapeJoinAll(opts);
         }
       }
-      cmdLine.add(configuration.getShExecutable().getPathString());
+      cmdLine.add(configuration.getShellExecutable().getPathString());
       cmdLine.add("-c");
       cmdLine.add(runUnderValue + " " + executablePath.getPathString() + " " +
           ShellEscaper.escapeJoinAll(args));
-      prettyCmdLine.add(configuration.getShExecutable().getPathString());
+      prettyCmdLine.add(configuration.getShellExecutable().getPathString());
       prettyCmdLine.add("-c");
       prettyCmdLine.add(runUnderValue + " " + prettyExecutablePath.getPathString() + " " +
           ShellEscaper.escapeJoinAll(args));