diff options
author | 2018-02-06 11:19:43 -0800 | |
---|---|---|
committer | 2018-02-06 11:21:14 -0800 | |
commit | f0b1b107d5c8e369ac18f4d5adf206b6f7dc6557 (patch) | |
tree | 06e60528775819b9d24b1b93e5ed9f561a9a3613 /src/main/java/com/google/devtools/build | |
parent | 71dbed482868e5a94eb945063c6dd6209aaf776c (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.java | 29 |
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, |