aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-03-20 16:10:55 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-20 16:12:57 -0700
commit00e7929448b3635c5d9bc0e5079f98540b83af1b (patch)
tree3bb770e694f7f0d64d5eb65e018219fb343c83a6 /src/main/java/com/google/devtools
parent06e1781a95f16bb4b1840fc50ae705b9cdb98b34 (diff)
Hand-rolls EnumRuntimeCodec
PiperOrigin-RevId: 189830623
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/EnumRuntimeCodec.java28
1 files changed, 6 insertions, 22 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/EnumRuntimeCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/EnumRuntimeCodec.java
index d9f2ea4aed..0d67591077 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/EnumRuntimeCodec.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/EnumRuntimeCodec.java
@@ -14,14 +14,9 @@
package com.google.devtools.build.lib.skyframe.serialization;
-import com.google.protobuf.ByteString;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.nio.ByteBuffer;
@SuppressWarnings("rawtypes")
class EnumRuntimeCodec implements ObjectCodec<Enum> {
@@ -32,27 +27,16 @@ class EnumRuntimeCodec implements ObjectCodec<Enum> {
}
@Override
- public void serialize(SerializationContext unusedContext, Enum value, CodedOutputStream codedOut)
+ public void serialize(SerializationContext context, Enum value, CodedOutputStream codedOut)
throws IOException, SerializationException {
- // We're using Java serialization below because Enums are serializable by default and a
- // hand-rolled version is going to be very similar.
- ByteString.Output out = ByteString.newOutput();
- ObjectOutputStream objOut = new ObjectOutputStream(out);
- objOut.writeObject(value);
- codedOut.writeBytesNoTag(out.toByteString());
+ context.serialize(value.getDeclaringClass(), codedOut);
+ codedOut.writeInt32NoTag(value.ordinal());
}
@Override
- public Enum deserialize(DeserializationContext unusedContext, CodedInputStream codedIn)
+ public Enum deserialize(DeserializationContext context, CodedInputStream codedIn)
throws SerializationException, IOException {
- ByteBuffer buffer = codedIn.readByteBuffer();
- ObjectInputStream objIn =
- new ObjectInputStream(
- new ByteArrayInputStream(buffer.array(), buffer.arrayOffset(), buffer.remaining()));
- try {
- return (Enum) objIn.readObject();
- } catch (ClassNotFoundException e) {
- throw new SerializationException("Couldn't find class for Enum deserialization?", e);
- }
+ Class<? extends Enum> enumType = context.deserialize(codedIn);
+ return enumType.getEnumConstants()[codedIn.readInt32()];
}
}