aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-05-05 18:06:42 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-05-05 18:37:14 +0200
commit50c3a68cfeb0fd21e8d883b958ff69517e2f817a (patch)
treefac04097fec2c7a76345e01cebf8e5ee462f7068 /src/main
parent72b14d0e09839b77b8a7dda46f6e90794f530419 (diff)
Make TransitiveInfoMap interface narrower.
This constrains implementations less, allowing for greater freedom when optimizing. PiperOrigin-RevId: 155203001
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMap.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImmutableMapBased.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java3
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(