From dd090a6e8825093e7e5364ed49f16ba68f0fe54c Mon Sep 17 00:00:00 2001 From: cpeyser Date: Tue, 20 Feb 2018 10:28:30 -0800 Subject: Some autocodec changes required to serialize SpawnAction: double field and CharSequence fields. PiperOrigin-RevId: 186323424 --- .../autocodec/AutoCodecProcessor.java | 21 ++++++++++----- .../serialization/autocodec/Marshallers.java | 30 +++++++++++++++++++--- 2 files changed, 42 insertions(+), 9 deletions(-) (limited to 'src/main/java/com/google/devtools/build') diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java index 38bcf24994..c3d14df9f2 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java @@ -222,6 +222,12 @@ public class AutoCodecProcessor extends AbstractProcessor { UnsafeProvider.class, parameter.getSimpleName()); break; + case DOUBLE: + serializeBuilder.addStatement( + "codedOut.writeDoubleNoTag($T.getInstance().getDouble(input, $L_offset))", + UnsafeProvider.class, + parameter.getSimpleName()); + break; case ARRAY: // fall through case DECLARED: @@ -291,6 +297,9 @@ public class AutoCodecProcessor extends AbstractProcessor { case INT: serializeBuilder.addStatement("codedOut.writeInt32NoTag($L)", getter); break; + case DOUBLE: + serializeBuilder.addStatement("codedOut.writeDoubleNoTag($L)", getter); + break; case ARRAY: // fall through case DECLARED: @@ -350,10 +359,10 @@ public class AutoCodecProcessor extends AbstractProcessor { case INT: serializeBuilder.addStatement("codedOut.writeInt32NoTag($L)", paramAccessor); break; - case ARRAY: - marshallers.writeSerializationCode( - new Marshaller.Context(serializeBuilder, parameter.asType(), paramAccessor)); + case DOUBLE: + serializeBuilder.addStatement("codedOut.writeDoubleNoTag($L)", paramAccessor); break; + case ARRAY: case DECLARED: marshallers.writeSerializationCode( new Marshaller.Context(serializeBuilder, parameter.asType(), paramAccessor)); @@ -384,10 +393,10 @@ public class AutoCodecProcessor extends AbstractProcessor { case INT: builder.addStatement("int $L = codedIn.readInt32()", paramName); break; - case ARRAY: - marshallers.writeDeserializationCode( - new Marshaller.Context(builder, parameter.asType(), paramName)); + case DOUBLE: + builder.addStatement("double $L = codedIn.readDouble()", paramName); break; + case ARRAY: case DECLARED: marshallers.writeDeserializationCode( new Marshaller.Context(builder, parameter.asType(), paramName)); 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 bb8e6e9495..d1a04da8c3 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 @@ -244,6 +244,11 @@ class Marshallers { } }; + private static void addStringDeserializationCode(Context context) { + context.builder.addStatement( + "$L = $T.asciiOptimized().deserialize(context, codedIn)", context.name, StringCodecs.class); + } + private final Marshaller stringMarshaller = new Marshaller() { @Override @@ -261,10 +266,28 @@ class Marshallers { @Override public void addDeserializationCode(Context context) { + addStringDeserializationCode(context); + } + }; + + private final Marshaller charSequenceMarshaller = + new Marshaller() { + @Override + public boolean matches(DeclaredType type) { + return matchesType(type, CharSequence.class); + } + + @Override + public void addSerializationCode(Context context) { context.builder.addStatement( - "$L = $T.asciiOptimized().deserialize(context, codedIn)", - context.name, - StringCodecs.class); + "$T.asciiOptimized().serialize(context, $L.toString(), codedOut)", + StringCodecs.class, + context.name); + } + + @Override + public void addDeserializationCode(Context context) { + addStringDeserializationCode(context); } }; @@ -913,6 +936,7 @@ class Marshallers { ImmutableList.of( enumMarshaller, stringMarshaller, + charSequenceMarshaller, optionalMarshaller, supplierMarshaller, uuidMarshller, -- cgit v1.2.3