diff options
Diffstat (limited to 'src')
3 files changed, 74 insertions, 22 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/HashCodeCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/HashCodeCodec.java new file mode 100644 index 0000000000..fbd2712792 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/HashCodeCodec.java @@ -0,0 +1,41 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.skyframe.serialization; + +import com.google.common.hash.HashCode; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; + +/** Encodes a HashCode. */ +public class HashCodeCodec implements ObjectCodec<HashCode> { + + @Override + public void serialize(SerializationContext context, HashCode obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + codedOut.writeByteArrayNoTag(obj.asBytes()); + } + + @Override + public HashCode deserialize(DeserializationContext context, CodedInputStream codedIn) + throws SerializationException, IOException { + return HashCode.fromBytes(codedIn.readByteArray()); + } + + @Override + public Class<HashCode> getEncodedClass() { + return HashCode.class; + } +} 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 5c78bed826..d64fe9da4e 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 @@ -25,7 +25,6 @@ import com.google.common.collect.ImmutableSortedMap; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -import com.google.common.hash.HashCode; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationCodeGenerator.Context; @@ -860,26 +859,6 @@ class Marshallers { } }; - /** Since we cannot add a codec to {@link HashCode}, it needs to be supported natively. */ - private final Marshaller hashCodeMarshaller = - new Marshaller() { - @Override - public boolean matches(DeclaredType type) { - return matchesType(type, HashCode.class); - } - - @Override - public void addSerializationCode(Context context) { - context.builder.addStatement("codedOut.writeByteArrayNoTag($L.asBytes())", context.name); - } - - @Override - public void addDeserializationCode(Context context) { - context.builder.addStatement( - "$L = $T.fromBytes(codedIn.readByteArray())", context.name, HashCode.class); - } - }; - private final Marshaller protoMarshaller = new Marshaller() { @Override @@ -1037,7 +1016,6 @@ class Marshallers { multimapMarshaller, nestedSetMarshaller, patternMarshaller, - hashCodeMarshaller, protoMarshaller, iterableMarshaller, charsetMarshaller, diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/HashCodeCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/HashCodeCodecTest.java new file mode 100644 index 0000000000..0f0eb49ac5 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/HashCodeCodecTest.java @@ -0,0 +1,33 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.skyframe.serialization; + +import com.google.common.hash.HashCode; +import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** A test for {@link HashCodeCodec} */ +@RunWith(JUnit4.class) +public class HashCodeCodecTest { + + @Test + public void testHashCodeCodec() throws Exception { + new SerializationTester( + HashCode.fromString("f00ba7"), HashCode.fromInt(456789), HashCode.fromLong(9001L)) + .runTests(); + } +} |