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,
