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;