diff options
author | 2018-03-20 16:10:55 -0700 | |
---|---|---|
committer | 2018-03-20 16:12:57 -0700 | |
commit | 00e7929448b3635c5d9bc0e5079f98540b83af1b (patch) | |
tree | 3bb770e694f7f0d64d5eb65e018219fb343c83a6 /src/main/java/com/google/devtools | |
parent | 06e1781a95f16bb4b1840fc50ae705b9cdb98b34 (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.java | 28 |
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()]; } } |