Split up BazelRuleClassProvider, and make the builder API more flexible.
This is in preparation for splitting up the rules into per-language modules.
We'll also add test coverage to make sure each module is individually useful,
so that it's possible to build a Bazel binary with a reduced set of rules.
--
MOS_MIGRATED_REVID=126672702
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index a99bed8..0c8dd59 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -102,12 +102,12 @@
private ConfigurationCollectionFactory configurationCollectionFactory;
private Class<? extends BuildConfiguration.Fragment> universalFragment;
private PrerequisiteValidator prerequisiteValidator;
- private ImmutableMap<String, Object> skylarkAccessibleTopLevels = ImmutableMap.of();
+ private ImmutableMap.Builder<String, Object> skylarkAccessibleTopLevels =
+ ImmutableMap.builder();
private ImmutableList.Builder<Class<?>> skylarkModules =
ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES);
- private ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>>
- registeredSkylarkProviders = ImmutableBiMap.of();
-
+ private ImmutableBiMap.Builder<String, Class<? extends TransitiveInfoProvider>>
+ registeredSkylarkProviders = ImmutableBiMap.builder();
public void addWorkspaceFilePrefix(String contents) {
defaultWorkspaceFilePrefix.append(contents);
@@ -191,8 +191,8 @@
return this;
}
- public Builder setSkylarkAccessibleTopLevels(ImmutableMap<String, Object> objects) {
- this.skylarkAccessibleTopLevels = objects;
+ public Builder addSkylarkAccessibleTopLevels(String name, Object object) {
+ this.skylarkAccessibleTopLevels.put(name, object);
return this;
}
@@ -202,12 +202,12 @@
}
/**
- * Registers a map that indicates which keys in structs returned by skylark rules should be
+ * Adds a mapping that determines which keys in structs returned by skylark rules should be
* interpreted as native TransitiveInfoProvider instances of type (map value).
*/
- public Builder setSkylarkProviderRegistry(
- ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> providers) {
- this.registeredSkylarkProviders = providers;
+ public Builder registerSkylarkProvider(
+ String name, Class<? extends TransitiveInfoProvider> provider) {
+ this.registeredSkylarkProviders.put(name, provider);
return this;
}
@@ -285,9 +285,9 @@
configurationCollectionFactory,
universalFragment,
prerequisiteValidator,
- skylarkAccessibleTopLevels,
+ skylarkAccessibleTopLevels.build(),
skylarkModules.build(),
- registeredSkylarkProviders);
+ registeredSkylarkProviders.build());
}
@Override