aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2016-02-15 10:50:12 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-02-15 13:43:41 +0000
commitf81c675928c6beeaae5f66480dc7dbef47f75fb8 (patch)
treeb3320bc3e8a3d2aff2741e8361ce6cdf56db8b65 /src/main/java/com/google/devtools/build/lib/analysis
parent7ebfedbc908adf0f2bae8e30e66abc54cb9c3336 (diff)
Enable injection of Skylark modules through the RuleClassProvider
This enable BlazeModule to specify extraneous Skylark modules. This will be used by Skylark remote repositories to add them from the BazelRepositoryModule. Issue #893, step 2 of the roadmap of http://goo.gl/OZV3o0 -- MOS_MIGRATED_REVID=114677157
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java16
1 files changed, 13 insertions, 3 deletions
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 62ab8a61c5..798b14db53 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
@@ -104,6 +104,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private Class<? extends BuildConfiguration.Fragment> universalFragment;
private PrerequisiteValidator prerequisiteValidator;
private ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses = ImmutableMap.of();
+ private ImmutableList.Builder<Class<?>> skylarkModules =
+ ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES);
private final List<Class<? extends FragmentOptions>> buildOptions = Lists.newArrayList();
public void addWorkspaceFile(String contents) {
@@ -190,6 +192,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return this;
}
+ public Builder addSkylarkModule(Class<?>... modules) {
+ this.skylarkModules.add(modules);
+ return this;
+ }
+
private RuleConfiguredTargetFactory createFactory(
Class<? extends RuleConfiguredTargetFactory> factoryClass) {
try {
@@ -264,6 +271,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
universalFragment,
prerequisiteValidator,
skylarkAccessibleJavaClasses,
+ skylarkModules.build(),
buildOptions);
}
@@ -374,6 +382,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
Class<? extends BuildConfiguration.Fragment> universalFragment,
PrerequisiteValidator prerequisiteValidator,
ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses,
+ ImmutableList<Class<?>> skylarkModules,
List<Class<? extends FragmentOptions>> buildOptions) {
this.preludeLabel = preludeLabel;
this.runfilesPrefix = runfilesPrefix;
@@ -388,7 +397,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
this.configurationCollectionFactory = configurationCollectionFactory;
this.universalFragment = universalFragment;
this.prerequisiteValidator = prerequisiteValidator;
- this.globals = createGlobals(skylarkAccessibleJavaClasses);
+ this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkModules);
this.buildOptions = buildOptions;
}
@@ -491,10 +500,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
}
private Environment.Frame createGlobals(
- ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses) {
+ ImmutableMap<String, SkylarkType> skylarkAccessibleJavaClasses,
+ ImmutableList<Class<?>> modules) {
try (Mutability mutability = Mutability.create("ConfiguredRuleClassProvider globals")) {
Environment env = createSkylarkRuleClassEnvironment(
- mutability, SkylarkModules.GLOBALS, null, null, null);
+ mutability, SkylarkModules.getGlobals(modules), null, null, null);
for (Map.Entry<String, SkylarkType> entry : skylarkAccessibleJavaClasses.entrySet()) {
env.setup(entry.getKey(), entry.getValue().getType());
}