aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java41
1 files changed, 30 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
index 85e65940fd..62f0015691 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
@@ -17,11 +17,13 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
import com.google.devtools.build.lib.analysis.config.RunUnder;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
+import com.google.devtools.build.lib.rules.SkylarkApiProvider;
import com.google.devtools.build.lib.util.Preconditions;
+import java.util.function.Consumer;
import javax.annotation.Nullable;
/**
@@ -47,11 +49,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
private final TransitiveInfoProviderMap providers;
private final ImmutableMap<Label, ConfigMatchingProvider> configConditions;
- RuleConfiguredTarget(
- RuleContext ruleContext,
- TransitiveInfoProviderMap providers,
- ImmutableMap<String, Object> legacySkylarkProviders,
- ImmutableMap<SkylarkClassObjectConstructor.Key, SkylarkClassObject> skylarkProviders) {
+ RuleConfiguredTarget(RuleContext ruleContext, TransitiveInfoProviderMap providers) {
super(ruleContext);
// We don't use ImmutableMap.Builder here to allow augmenting the initial list of 'default'
// providers by passing them in.
@@ -62,13 +60,14 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
Preconditions.checkState(providerBuilder.contains(FilesToRunProvider.class));
// Initialize every SkylarkApiProvider
- if (!legacySkylarkProviders.isEmpty() || !skylarkProviders.isEmpty()) {
- SkylarkProviders allSkylarkProviders = new SkylarkProviders(legacySkylarkProviders,
- skylarkProviders);
- allSkylarkProviders.init(this);
- providerBuilder.add(allSkylarkProviders);
+ for (int i = 0; i < providers.getProviderCount(); i++) {
+ Object obj = providers.getProviderInstanceAt(i);
+ if (obj instanceof SkylarkApiProvider) {
+ ((SkylarkApiProvider) obj).init(this);
+ }
}
+
this.providers = providerBuilder.build();
this.configConditions = ruleContext.getConfigConditions();
@@ -116,4 +115,24 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
return String.format("target (rule class of '%s') doesn't have provider '%s'.",
getTarget().getRuleClass(), name);
}
+
+ @Override
+ protected void addExtraSkylarkKeys(Consumer<String> result) {
+ for (int i = 0; i < providers.getProviderCount(); i++) {
+ Object classAt = providers.getProviderKeyAt(i);
+ if (classAt instanceof String) {
+ result.accept((String) classAt);
+ }
+ }
+ }
+
+ @Override
+ protected SkylarkClassObject rawGetSkylarkProvider(ClassObjectConstructor.Key providerKey) {
+ return providers.getProvider(providerKey);
+ }
+
+ @Override
+ protected Object rawGetSkylarkProvider(String providerKey) {
+ return providers.getProvider(providerKey);
+ }
}