Add ExecGroupCollection and ExecGroupContext objects to starlark for ctx.exec_groups[<exec_group>] and ctx.exec_groups[<exec_group>].toolchains[<toolchain_type>] access respectively
WANT_LGTM=all
PiperOrigin-RevId: 307697565
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java
index 8274d83..2cbe240 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainCollection.java
@@ -26,11 +26,14 @@
/**
* A wrapper class for a map of exec_group names to their relevent ToolchainContext.
*
- * @param <T> any class that extends ToolchainCollection so this can be used, e.g., both before and
- * after toolchain resolution.
+ * @param <T> any class that extends ToolchainContext. This generic allows ToolchainCollection to be
+ * used, e.g., both before and after toolchain resolution.
*/
public class ToolchainCollection<T extends ToolchainContext> {
- @VisibleForTesting public static final String DEFAULT_EXEC_GROUP_NAME = "default_exec_group";
+
+ // This is intentionally a string that would fail {@code Identifier.isValid} so that
+ // users can't create a group with the same name.
+ @VisibleForTesting public static final String DEFAULT_EXEC_GROUP_NAME = "default-exec-group";
/** A map of execution group names to toolchain contexts. */
private final ImmutableMap<String, T> toolchainContexts;
@@ -40,6 +43,10 @@
toolchainContexts = ImmutableMap.copyOf(contexts);
}
+ ToolchainCollection(ToolchainCollection<T> toCopy) {
+ toolchainContexts = ImmutableMap.copyOf(toCopy.getContextMap());
+ }
+
/** Builder for ToolchainCollection. */
public static class Builder<T extends ToolchainContext> {
private final Map<String, T> toolchainContexts = new HashMap<>();
@@ -62,7 +69,7 @@
}
}
- public T getDefaultToolchainContext() {
+ T getDefaultToolchainContext() {
return toolchainContexts.get(DEFAULT_EXEC_GROUP_NAME);
}
@@ -76,6 +83,10 @@
.collect(toImmutableSet());
}
+ ImmutableSet<String> getExecGroups() {
+ return toolchainContexts.keySet();
+ }
+
public ToolchainCollection<ToolchainContext> asToolchainContexts() {
return new ToolchainCollection<>(ImmutableMap.copyOf(toolchainContexts));
}