Some autocodec changes required to serialize SpawnAction: double field and CharSequence fields.

PiperOrigin-RevId: 186323424
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 38bcf24..c3d14df 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 @@
                 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 @@
       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 @@
         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 @@
         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 bb8e6e9..d1a04da 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 @@
         }
       };
 
+  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 @@
 
         @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 @@
       ImmutableList.of(
           enumMarshaller,
           stringMarshaller,
+          charSequenceMarshaller,
           optionalMarshaller,
           supplierMarshaller,
           uuidMarshller,