diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java | 37 |
1 files changed, 35 insertions, 2 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 a39737ce7c..be01445b3b 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 @@ -21,6 +21,7 @@ import static com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClass import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -106,6 +107,9 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { private ImmutableList.Builder<Class<?>> skylarkModules = ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES); private final List<Class<? extends FragmentOptions>> buildOptions = Lists.newArrayList(); + private ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> + registeredSkylarkProviders = ImmutableBiMap.of(); + public void addWorkspaceFilePrefix(String contents) { defaultWorkspaceFilePrefix.append(contents); @@ -198,6 +202,16 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { return this; } + /** + * Registers a map that indicates 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; + return this; + } + private RuleConfiguredTargetFactory createFactory( Class<? extends RuleConfiguredTargetFactory> factoryClass) { try { @@ -274,7 +288,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { prerequisiteValidator, skylarkAccessibleTopLevels, skylarkModules.build(), - buildOptions); + buildOptions, + registeredSkylarkProviders); } @Override @@ -373,6 +388,9 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { private final Environment.Frame globals; private final List<Class<? extends FragmentOptions>> buildOptions; + + private final ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> + registeredSkylarkProviders; private ConfiguredRuleClassProvider( Label preludeLabel, @@ -391,7 +409,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { PrerequisiteValidator prerequisiteValidator, ImmutableMap<String, Object> skylarkAccessibleJavaClasses, ImmutableList<Class<?>> skylarkModules, - List<Class<? extends FragmentOptions>> buildOptions) { + List<Class<? extends FragmentOptions>> buildOptions, + ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> registeredSkylarkProviders) { this.preludeLabel = preludeLabel; this.runfilesPrefix = runfilesPrefix; this.toolsRepository = toolsRepository; @@ -408,6 +427,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { this.prerequisiteValidator = prerequisiteValidator; this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkModules); this.buildOptions = buildOptions; + this.registeredSkylarkProviders = registeredSkylarkProviders; } public PrerequisiteValidator getPrerequisiteValidator() { @@ -507,6 +527,19 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { } /** + * Returns a map that indicates which keys in structs returned by skylark rules should be + * interpreted as native TransitiveInfoProvider instances of type (map value). + * + * <p>That is, if this map contains "dummy" -> DummyProvider.class, a "dummy" entry in a skylark + * rule implementations returned struct will be exported from that ConfiguredTarget as a + * DummyProvider. + */ + public ImmutableBiMap<String, Class<? extends TransitiveInfoProvider>> + getRegisteredSkylarkProviders() { + return this.registeredSkylarkProviders; + } + + /** * Creates a BuildOptions class for the given options taken from an optionsProvider. */ public BuildOptions createBuildOptions(OptionsClassProvider optionsProvider) { |