aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
diff options
context:
space:
mode:
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.java37
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) {