diff options
author | 2018-07-30 12:44:17 -0700 | |
---|---|---|
committer | 2018-07-30 12:46:29 -0700 | |
commit | df8bf902e642ad8e8244e7fd58f1c36a6dfadb6c (patch) | |
tree | 8a7c8f6f4bebcc5c9e1d938efde8da37bd8ea908 /src/main/java/com/google/devtools/build/lib/analysis | |
parent | ccb745699953365425c1931c05413d9911e051a8 (diff) |
Automated rollback of commit be88b8539b30d1c36c68b0f6acfe1e9ae010db3b.
*** Reason for rollback ***
Concerns were raised about this breaking change, so rolling back to be safe.
*** Original change description ***
Throw a rule error when a skylark rule implementation returns multiple providers of the same type.
RELNOTES: A rule error is now thrown if a Skylark rule implementation function returns multiple providers of the same type.
PiperOrigin-RevId: 206629186
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java index 86dc965765..1f2a184844 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java @@ -36,7 +36,6 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.AdvertisedProviderSet; import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.NativeProvider; -import com.google.devtools.build.lib.packages.Provider; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; @@ -58,8 +57,8 @@ import com.google.devtools.build.lib.syntax.SkylarkType; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; +import java.util.ArrayList; import java.util.Collections; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.Nullable; @@ -291,7 +290,7 @@ public final class SkylarkRuleConfiguredTargetUtil { throws EvalException { Info oldStyleProviders = StructProvider.STRUCT.createEmpty(loc); - Map<Provider.Key, Info> declaredProviders = new LinkedHashMap<>(); + ArrayList<Info> declaredProviders = new ArrayList<>(); if (target instanceof Info) { // Either an old-style struct or a single declared provider (not in a list) @@ -311,17 +310,12 @@ public final class SkylarkRuleConfiguredTargetUtil { Info.class, loc, "The value of 'providers' should be a sequence of declared providers"); - Provider.Key providerKey = declaredProvider.getProvider().getKey(); - if (declaredProviders.put(providerKey, declaredProvider) != null) { - context.getRuleContext().ruleError( - "Multiple conflicting returned providers with key " + providerKey); - } + declaredProviders.add(declaredProvider); } } } else { - Provider.Key providerKey = struct.getProvider().getKey(); // Single declared provider - declaredProviders.put(providerKey, struct); + declaredProviders.add(struct); } } else if (target instanceof Iterable) { // Sequence of declared providers @@ -333,17 +327,13 @@ public final class SkylarkRuleConfiguredTargetUtil { loc, "A return value of a rule implementation function should be " + "a sequence of declared providers"); - Provider.Key providerKey = declaredProvider.getProvider().getKey(); - if (declaredProviders.put(providerKey, declaredProvider) != null) { - context.getRuleContext().ruleError( - "Multiple conflicting returned providers with key " + providerKey); - } + declaredProviders.add(declaredProvider); } } boolean defaultProviderProvidedExplicitly = false; - for (Info declaredProvider : declaredProviders.values()) { + for (Info declaredProvider : declaredProviders) { if (declaredProvider .getProvider() .getKey() |