diff options
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.java | 41 |
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); + } } |