diff options
author | 2017-05-05 18:06:42 +0200 | |
---|---|---|
committer | 2017-05-05 18:37:14 +0200 | |
commit | 50c3a68cfeb0fd21e8d883b958ff69517e2f817a (patch) | |
tree | fac04097fec2c7a76345e01cebf8e5ee462f7068 /src/main/java/com | |
parent | 72b14d0e09839b77b8a7dda46f6e90794f530419 (diff) |
Make TransitiveInfoMap interface narrower.
This constrains implementations less, allowing for greater freedom when optimizing.
PiperOrigin-RevId: 155203001
Diffstat (limited to 'src/main/java/com')
8 files changed, 15 insertions, 26 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java index 25f2026458..dc7488778c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java @@ -19,7 +19,6 @@ import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtr import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.UnmodifiableIterator; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -37,6 +36,7 @@ import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.util.Preconditions; import java.util.Arrays; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; @@ -121,7 +121,7 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider> @Override - public UnmodifiableIterator<TransitiveInfoProvider> iterator() { + public Iterator<TransitiveInfoProvider> iterator() { return providers.values().iterator(); } @@ -189,7 +189,7 @@ public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider> /** Adds providers to the aspect. */ public Builder addProviders(TransitiveInfoProviderMap providers) { for (Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> entry : - providers.entrySet()) { + providers.entries()) { addProvider(entry.getKey(), entry.getKey().cast(entry.getValue())); } return this; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java index f2a8781c07..10f5caef24 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java @@ -91,7 +91,7 @@ public final class MergedConfiguredTarget extends AbstractConfiguredTarget { for (ConfiguredAspect aspect : aspects) { for (Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> entry : - aspect.getProviders().entrySet()) { + aspect.getProviders().entries()) { Class<? extends TransitiveInfoProvider> providerClass = entry.getKey(); if (OutputGroupProvider.class.equals(providerClass) || SkylarkProviders.class.equals(providerClass) 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 4c0785e180..993b812f95 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 @@ -52,7 +52,8 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { super(ruleContext); // We don't use ImmutableMap.Builder here to allow augmenting the initial list of 'default' // providers by passing them in. - TransitiveInfoProviderMapBuilder providerBuilder = providers.toBuilder(); + TransitiveInfoProviderMapBuilder providerBuilder = + new TransitiveInfoProviderMapBuilder().addAll(providers); Preconditions.checkState(providerBuilder.contains(RunfilesProvider.class)); Preconditions.checkState(providerBuilder.contains(FileProvider.class)); Preconditions.checkState(providerBuilder.contains(FilesToRunProvider.class)); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java index a0bf3ad4a1..8fa2c4e9e5 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java @@ -147,7 +147,7 @@ public final class RuleConfiguredTargetBuilder { private void addRegisteredProvidersToSkylarkProviders(TransitiveInfoProviderMap providers) { Map<String, Object> nativeSkylarkProviders = new HashMap<>(); for (Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> entry : - providers.entrySet()) { + providers.entries()) { if (ruleContext.getSkylarkProviderRegistry().containsValue(entry.getKey())) { String skylarkName = ruleContext.getSkylarkProviderRegistry().inverse().get(entry.getKey()); nativeSkylarkProviders.put(skylarkName, entry.getValue()); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java index 6319cf7123..b824bb2e09 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java @@ -14,8 +14,6 @@ package com.google.devtools.build.lib.analysis; -import com.google.common.collect.ImmutableCollection; -import com.google.common.collect.ImmutableSet; import java.util.Map; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -23,15 +21,11 @@ import javax.annotation.concurrent.Immutable; /** Provides a mapping between a TransitiveInfoProvider class and an instance. */ @Immutable public interface TransitiveInfoProviderMap { - /** Returns the instance for the provided providerClass, or <tt>null</tt> if not present. */ @Nullable <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass); - ImmutableSet<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> - entrySet(); - - ImmutableCollection<TransitiveInfoProvider> values(); + Iterable<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> entries(); - TransitiveInfoProviderMapBuilder toBuilder(); + Iterable<TransitiveInfoProvider> values(); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java index dcf27077e5..f87ca57269 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java @@ -14,9 +14,7 @@ package com.google.devtools.build.lib.analysis; -import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import java.util.Map; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -40,18 +38,13 @@ final class TransitiveInfoProviderMapImmutableMapBased implements TransitiveInfo } @Override - public ImmutableSet<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> - entrySet() { + public Iterable<Map.Entry<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>> + entries() { return map.entrySet(); } @Override - public ImmutableCollection<TransitiveInfoProvider> values() { + public Iterable<TransitiveInfoProvider> values() { return map.values(); } - - @Override - public TransitiveInfoProviderMapBuilder toBuilder() { - return new TransitiveInfoProviderMapBuilder().addAll(map.values()); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index ca2595d4ef..4f540224ff 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -197,7 +197,7 @@ public final class CcLibraryHelper { CcLinkingOutputs linkingOutputs, CcLinkingOutputs linkingOutputsExcludingPrecompiledLibraries, CppCompilationContext context) { - this.providers = providers.toBuilder(); + this.providers = new TransitiveInfoProviderMapBuilder().addAll(providers); this.outputGroups = ImmutableMap.copyOf(outputGroups); this.compilationOutputs = compilationOutputs; this.linkingOutputs = linkingOutputs; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java index 305ac70c1e..f8c6daec8f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java @@ -186,7 +186,8 @@ public final class JavaProvider extends SkylarkClassObject implements Transitive } public static Builder copyOf(JavaProvider javaProvider) { - return new Builder(javaProvider.getProviders().toBuilder()); + return new Builder( + new TransitiveInfoProviderMapBuilder().addAll(javaProvider.getProviders())); } public <P extends TransitiveInfoProvider> Builder addProvider( |