For RuleContext#getActionOwner, return null instead of crashing if you request an ActionOwner for a non-existent exec group. This makes it easier for callers to handle the return if they aren't sure what exec groups is going to exist in the rulecontext.

PiperOrigin-RevId: 316126509
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 86fac7f..aee05d6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -435,14 +435,14 @@
   }
 
   @Override
+  @Nullable
   public ActionOwner getActionOwner(String execGroup) {
     if (actionOwners.containsKey(execGroup)) {
       return actionOwners.get(execGroup);
     }
-    Preconditions.checkState(
-        toolchainContexts == null || toolchainContexts.hasToolchainContext(execGroup),
-        "action owner requested for non-existent exec group '%s'.",
-        execGroup);
+    if (toolchainContexts != null && !toolchainContexts.hasToolchainContext(execGroup)) {
+      return null;
+    }
     ActionOwner actionOwner =
         createActionOwner(
             rule,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
index 2741086..eb8fc9a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
@@ -50,8 +50,9 @@
 
   /**
    * Returns the action owner that should be used for actions with the given exec group's execution
-   * platform. If an invalid exec group is given, throws a runtime exception.
+   * platform. If an invalid exec group is given, returns null.
    */
+  @Nullable
   ActionOwner getActionOwner(String execGroup);
 
   /** Returns the action key context. */
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 d677b57..482d555 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
@@ -1309,6 +1309,11 @@
       return this;
     }
 
+    /**
+     * Sets the exec group for this action by name. This does not check that {@code execGroup} is
+     * being set to a valid exec group (i.e. one that actually exists). This method expects callers
+     * to do that work.
+     */
     public Builder setExecGroup(String execGroup) {
       this.execGroup = execGroup;
       return this;