aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java27
2 files changed, 24 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java
index 0c3bd38b48..7a5ed434d9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java
@@ -109,6 +109,6 @@ public class TransitiveInfoProviderMapBuilder {
}
public TransitiveInfoProviderMap build() {
- return new TransitiveInfoProviderMapImpl(providers);
+ return TransitiveInfoProviderMapImpl.create(providers);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java
index b43129d902..1e13d4286f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapImpl.java
@@ -14,9 +14,12 @@
package com.google.devtools.build.lib.analysis;
+import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.collect.ImmutableSharedKeyMap;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import java.util.Map;
import javax.annotation.Nullable;
@@ -24,12 +27,28 @@ import javax.annotation.Nullable;
* Implementation of {@link TransitiveInfoProvider} that uses {@link ImmutableSharedKeyMap}. For
* memory efficiency, inheritance is used instead of aggregation as an implementation detail.
*/
-class TransitiveInfoProviderMapImpl
- extends ImmutableSharedKeyMap<Object, Object>
+@AutoCodec
+class TransitiveInfoProviderMapImpl extends ImmutableSharedKeyMap<Object, Object>
implements TransitiveInfoProviderMap {
- TransitiveInfoProviderMapImpl(Map<Object, Object> map) {
- super(map);
+ @VisibleForSerialization
+ @AutoCodec.Instantiator
+ TransitiveInfoProviderMapImpl(OffsetTable<Object> offsetTable, Object[] values) {
+ super(offsetTable, values);
+ }
+
+ static TransitiveInfoProviderMapImpl create(Map<Object, Object> map) {
+ int count = map.size();
+ Object[] keys = new Object[count];
+ Object[] values = new Object[count];
+ int i = 0;
+ for (Map.Entry<Object, Object> entry : map.entrySet()) {
+ keys[i] = entry.getKey();
+ values[i] = entry.getValue();
+ ++i;
+ }
+ Preconditions.checkArgument(keys.length == values.length);
+ return new TransitiveInfoProviderMapImpl(ImmutableSharedKeyMap.createOffsetTable(keys), values);
}
@SuppressWarnings("unchecked")