From efa4db5a1d8ce78b6439f653e748c7343c6a61c8 Mon Sep 17 00:00:00 2001 From: cpeyser Date: Thu, 8 Feb 2018 11:06:17 -0800 Subject: Add an AutoCodec marshaller for UUID. This is required to serialize CppCompileAction. PiperOrigin-RevId: 185020942 --- .../serialization/autocodec/Marshallers.java | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/main/java/com/google/devtools/build/lib') 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 c4c6fb53b7..b625d347bb 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 @@ -42,6 +42,7 @@ import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.function.Consumer; import java.util.regex.Pattern; import javax.annotation.processing.ProcessingEnvironment; @@ -289,6 +290,36 @@ class Marshallers { } }; + private final Marshaller uuidMarshller = + new Marshaller() { + @Override + public boolean matches(DeclaredType type) { + return matchesType(type, UUID.class); + } + + @Override + public void addSerializationCode(Context context) { + context.builder.addStatement( + "codedOut.writeInt64NoTag($L.getMostSignificantBits())", context.name); + context.builder.addStatement( + "codedOut.writeInt64NoTag($L.getLeastSignificantBits())", context.name); + } + + @Override + public void addDeserializationCode(Context context) { + String mostSignificantBitsName = context.makeName("mostSignificantBits"); + String leastSignificantBitsName = context.makeName("leastSignificantBits"); + context.builder.addStatement("long $L = codedIn.readInt64()", mostSignificantBitsName); + context.builder.addStatement("long $L = codedIn.readInt64()", leastSignificantBitsName); + context.builder.addStatement( + "$L = new $T($L, $L)", + context.name, + UUID.class, + mostSignificantBitsName, + leastSignificantBitsName); + } + }; + private final Marshaller supplierMarshaller = new Marshaller() { @Override @@ -922,6 +953,7 @@ class Marshallers { stringMarshaller, optionalMarshaller, supplierMarshaller, + uuidMarshller, mapEntryMarshaller, listMarshaller, immutableSetMarshaller, -- cgit v1.2.3