aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-02-06 11:19:43 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-06 11:21:14 -0800
commitf0b1b107d5c8e369ac18f4d5adf206b6f7dc6557 (patch)
tree06e60528775819b9d24b1b93e5ed9f561a9a3613 /src/main/java/com/google/devtools/build
parent71dbed482868e5a94eb945063c6dd6209aaf776c (diff)
Add Supplier support to AutoCodec.
PiperOrigin-RevId: 184710375
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/Marshallers.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/Marshallers.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/Marshallers.java
index 5aef00a4f6..c4c6fb53b7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/Marshallers.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/Marshallers.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.skyframe.serialization.autocodec;
import com.google.common.base.Optional;
+import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
@@ -288,6 +289,33 @@ class Marshallers {
}
};
+ private final Marshaller supplierMarshaller =
+ new Marshaller() {
+ @Override
+ public boolean matches(DeclaredType type) {
+ return matchesErased(type, Supplier.class);
+ }
+
+ @Override
+ public void addSerializationCode(Context context) {
+ DeclaredType suppliedType =
+ (DeclaredType) context.getDeclaredType().getTypeArguments().get(0);
+ writeSerializationCode(context.with(suppliedType, context.name + ".get()"));
+ }
+
+ @Override
+ public void addDeserializationCode(Context context) {
+ DeclaredType suppliedType =
+ (DeclaredType) context.getDeclaredType().getTypeArguments().get(0);
+ String suppliedName = context.makeName("supplied");
+ writeDeserializationCode(context.with(suppliedType, suppliedName));
+ String suppliedFinalName = context.makeName("suppliedFinal");
+ context.builder.addStatement(
+ "final $T $L = $L", suppliedType, suppliedFinalName, suppliedName);
+ context.builder.addStatement("$L = () -> $L", context.name, suppliedFinalName);
+ }
+ };
+
private final Marshaller mapEntryMarshaller =
new Marshaller() {
@Override
@@ -893,6 +921,7 @@ class Marshallers {
enumMarshaller,
stringMarshaller,
optionalMarshaller,
+ supplierMarshaller,
mapEntryMarshaller,
listMarshaller,
immutableSetMarshaller,