aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-02-27 13:38:36 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-27 13:40:44 -0800
commitc5e36f668ae953dfec24850522b10f79bc686945 (patch)
tree92e51bcc828a873f4bd77e9df4730fcab3450334 /src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java
parent81a95c2f8bdb0080741cbc6ce6d007228f81bf37 (diff)
Removes the need to map SkyFunctionName to codec in SkyKeySerializer
* FILE_SYMLINK* codecs need ImmutableList so this adds an ImmutableList runtime codec. * Adds SkyFunction names where codecs exist for their SkyKeys. * Adds a few @AutoCodec singleton codecs. We cannot yet disable the ImmutableList marshaller because currently the runtime ImmutableList codec requires runtime codecs for the contained elements, which doesn't hold everywhere (particularly for protos). PiperOrigin-RevId: 187224736
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java
new file mode 100644
index 0000000000..e051af6331
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListRuntimeCodec.java
@@ -0,0 +1,56 @@
+// 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.collect.ImmutableList;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
+
+/**
+ * A {@link ObjectCodec} for {@link ImmutableList}.
+ *
+ * <p>This differs from {@link ImmutableListCodec} in that this uses the runtime type of contained
+ * objects for serialization.
+ */
+@SuppressWarnings("rawtypes") // Intentional erasure of ImmutableList.
+class ImmutableListRuntimeCodec implements ObjectCodec<ImmutableList> {
+
+ @Override
+ public Class<ImmutableList> getEncodedClass() {
+ return ImmutableList.class;
+ }
+
+ @Override
+ public void serialize(
+ SerializationContext context, ImmutableList object, CodedOutputStream codedOut)
+ throws IOException, SerializationException {
+ codedOut.writeInt32NoTag(object.size());
+ for (Object obj : object) {
+ context.serialize(obj, codedOut);
+ }
+ }
+
+ @Override
+ public ImmutableList deserialize(DeserializationContext context, CodedInputStream codedIn)
+ throws IOException, SerializationException {
+ int size = codedIn.readInt32();
+ Object[] list = new Object[size];
+ for (int i = 0; i < size; ++i) {
+ list[i] = context.deserialize(codedIn);
+ }
+ return ImmutableList.copyOf(list);
+ }
+}