aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-07-30 12:44:17 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-30 12:46:29 -0700
commitdf8bf902e642ad8e8244e7fd58f1c36a6dfadb6c (patch)
tree8a7c8f6f4bebcc5c9e1d938efde8da37bd8ea908 /src/main/java/com/google/devtools/build/lib/analysis
parentccb745699953365425c1931c05413d9911e051a8 (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.java22
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()