diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2016-02-15 10:50:12 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-02-15 13:43:41 +0000 |
commit | f81c675928c6beeaae5f66480dc7dbef47f75fb8 (patch) | |
tree | b3320bc3e8a3d2aff2741e8361ce6cdf56db8b65 /src/main/java/com/google/devtools/build/lib/analysis | |
parent | 7ebfedbc908adf0f2bae8e30e66abc54cb9c3336 (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.java | 16 |
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()); } |