diff options
author | shahan <shahan@google.com> | 2018-03-14 17:08:08 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-14 17:09:34 -0700 |
commit | a1c2826e0fe95959d498b18d38eb8d2a7d45e55d (patch) | |
tree | 5310b0b9d18f5bd71dd443342d7b68af30332223 /src/main/java/com/google/devtools/build/lib | |
parent | 92044990cdc318fa49cd769181ad9866a9d86ef6 (diff) |
Splits the iterableMarshaller into runtime codecs.
Makes NestedSetCodec into a runtime codec instead of a Marshaller.
PiperOrigin-RevId: 189110883
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
14 files changed, 106 insertions, 196 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index cfa53797cf..528d15aca2 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -398,7 +398,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", @@ -443,7 +442,6 @@ java_library( ":transitive-info-provider", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/concurrent", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//third_party:guava", ], @@ -535,13 +533,11 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/compacthashset", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/graph", "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/profiler/memory:current_rule_tracker", "//src/main/java/com/google/devtools/build/lib/shell", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", @@ -611,7 +607,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/rules/genrule", "//src/main/java/com/google/devtools/build/lib/rules/objc", "//src/main/java/com/google/devtools/build/lib/rules/platform", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", @@ -817,7 +812,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", @@ -981,11 +975,9 @@ java_library( "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/shell", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", @@ -1084,7 +1076,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/config", "//src/main/java/com/google/devtools/build/lib/rules/cpp", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", @@ -1113,7 +1104,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/cpp", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD index 35bea729dc..71a951558f 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BUILD +++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD @@ -34,11 +34,9 @@ java_library( "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/collect/nestedset:fingerprint_cache", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/shell", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", diff --git a/src/main/java/com/google/devtools/build/lib/collect/BUILD b/src/main/java/com/google/devtools/build/lib/collect/BUILD index f8c7071081..e54e3266d1 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/BUILD +++ b/src/main/java/com/google/devtools/build/lib/collect/BUILD @@ -15,6 +15,7 @@ java_library( deps = [ "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//third_party:guava", "//third_party:jsr305", ], diff --git a/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java b/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java new file mode 100644 index 0000000000..e61055ecfc --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/collect/IterableCodecs.java @@ -0,0 +1,97 @@ +// 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.collect; + +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationContext; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; + +@SuppressWarnings("rawtypes") +class IterableCodecs { + static class FluentIterableCodec implements ObjectCodec<FluentIterable> { + @Override + public Class<FluentIterable> getEncodedClass() { + return FluentIterable.class; + } + + @Override + public void serialize( + SerializationContext context, FluentIterable obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + IterableCodecs.serialize(context, obj, codedOut); + } + + @Override + public FluentIterable deserialize(DeserializationContext context, CodedInputStream codedIn) + throws SerializationException, IOException { + return FluentIterable.from(IterableCodecs.deserialize(context, codedIn)); + } + } + + static class IterablesChainCodec implements ObjectCodec<IterablesChain> { + @Override + public Class<IterablesChain> getEncodedClass() { + return IterablesChain.class; + } + + @Override + public void serialize( + SerializationContext context, IterablesChain obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + IterableCodecs.serialize(context, obj, codedOut); + } + + @Override + public IterablesChain deserialize(DeserializationContext context, CodedInputStream codedIn) + throws SerializationException, IOException { + return new IterablesChain<>(IterableCodecs.deserialize(context, codedIn)); + } + } + + private static void serialize( + SerializationContext context, Iterable obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + for (Object elt : obj) { + context.serialize(elt, codedOut); + } + context.serialize(DONE, codedOut); + } + + private static ImmutableList<Object> deserialize( + DeserializationContext context, CodedInputStream codedIn) + throws SerializationException, IOException { + ImmutableList.Builder<Object> builder = ImmutableList.builder(); + for (Object next = context.deserialize(codedIn); + next != DONE; + next = context.deserialize(codedIn)) { + builder.add(next); + } + return builder.build(); + } + + /** + * An object used to mark the end of the sequence of elements. + * + * <p>We use this instead of emitting a count to avoid possibly running deduplication twice. + */ + @AutoCodec @AutoCodec.VisibleForSerialization static final Object DONE = new Object(); +} diff --git a/src/main/java/com/google/devtools/build/lib/collect/IterablesChain.java b/src/main/java/com/google/devtools/build/lib/collect/IterablesChain.java index 5fa4f8621e..fe0f4bbe0c 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/IterablesChain.java +++ b/src/main/java/com/google/devtools/build/lib/collect/IterablesChain.java @@ -40,7 +40,7 @@ public final class IterablesChain<T> implements Iterable<T> { private final Iterable<T> chain; - private IterablesChain(Iterable<T> chain) { + IterablesChain(Iterable<T> chain) { this.chain = chain; } @@ -103,7 +103,7 @@ public final class IterablesChain<T> implements Iterable<T> { } /** - * If this is called, the the resulting {@link IterablesChain} object uses a hash set to remove + * If this is called, the resulting {@link IterablesChain} object uses a hash set to remove * duplicate elements. */ public Builder<T> deduplicate() { diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD index dc51b15368..bd372ff043 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/BUILD @@ -12,6 +12,7 @@ java_library( srcs = [ "NestedSet.java", "NestedSetBuilder.java", + "NestedSetCodec.java", "NestedSetView.java", "NestedSetVisitor.java", "Order.java", @@ -19,22 +20,9 @@ java_library( deps = [ "//src/main/java/com/google/devtools/build/lib/collect/compacthashset", "//src/main/java/com/google/devtools/build/lib/concurrent", - "//third_party:guava", - "//third_party:jsr305", - ], -) - -java_library( - name = "serialization", - srcs = [ - "NestedSetCodec.java", - "NestedSetSerializer.java", - ], - deps = [ - ":nestedset", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:kryo", "//third_party:guava", + "//third_party:jsr305", "//third_party/protobuf:protobuf_java", ], ) diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetSerializer.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetSerializer.java deleted file mode 100644 index 3bb2552915..0000000000 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetSerializer.java +++ /dev/null @@ -1,56 +0,0 @@ -// 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.collect.nestedset; - -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.Serializer; -import com.esotericsoftware.kryo.io.Input; -import com.esotericsoftware.kryo.io.Output; - -/** - * {@link Serializer} for {@link NestedSet}. - * - * <p>Needed to handle {@link NestedSet}'s sentinel values correctly. - */ -public class NestedSetSerializer extends Serializer<NestedSet<Object>> { - - @Override - public void write(Kryo kryo, Output output, NestedSet<Object> nestedSet) { - kryo.writeObject(output, nestedSet.getOrder()); - Object children = nestedSet.rawChildren(); - if (children == NestedSet.EMPTY_CHILDREN) { - output.writeBoolean(false); - } else { - output.writeBoolean(true); - kryo.writeClassAndObject(output, children); - } - } - - @Override - public NestedSet<Object> read(Kryo kryo, Input input, Class<NestedSet<Object>> unusedType) { - Order order = kryo.readObject(input, Order.class); - if (input.readBoolean()) { - return new NestedSet<>(order, kryo.readClassAndObject(input)); - } else { - return new NestedSet<>(order, NestedSet.EMPTY_CHILDREN); - } - } - - public static void registerSerializers(Kryo kryo) { - kryo.register(NestedSet.class, new NestedSetSerializer()); - kryo.register(Order.class); - kryo.register(Object[].class); - } -} diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD index 52f40ee300..b77aa2c62e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -27,12 +27,10 @@ java_library( "//src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations", "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/lib/shell", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe", diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD b/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD index fa823867b5..bfce8e108e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD @@ -19,7 +19,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD index d6c8cf42ab..73dfd7c8f5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BUILD @@ -25,14 +25,12 @@ java_library( "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//src/main/java/com/google/devtools/build/lib/rules/config", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/shell", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/common/options", diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD index d118b6183f..918e3f65bb 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD @@ -15,7 +15,6 @@ java_library( deps = [ ":kryo", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:registered-singleton", - "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//third_party:guava", "//third_party:jsr305", "//third_party/protobuf:protobuf_java", diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodec.java index d0b6a7368f..859b400826 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodec.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodec.java @@ -40,10 +40,12 @@ class JavaSerializableCodec implements ObjectCodec<Object> { try { objOut.writeObject(obj); } catch (NotSerializableException e) { - throw new SerializationException.NoCodecException("Object " + obj + " not serializable", e); + throw new SerializationException.NoCodecException( + "Object " + obj + " of type " + obj.getClass() + " not serializable", e); } catch (NotSerializableRuntimeException e) { // Values that inherit from Serializable but actually aren't serializable. - throw new SerializationException.NoCodecException("Object " + obj + " not serializable", e); + throw new SerializationException.NoCodecException( + "Object " + obj + " of type " + obj.getClass() + " not serializable", e); } codedOut.writeBytesNoTag(out.toByteString()); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/BUILD index dfb7c0f261..3c0b5da183 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/BUILD @@ -17,8 +17,6 @@ java_library( ":registered-singleton", ":unsafe-provider", "//third_party/protobuf:protobuf_java", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", ], ) @@ -61,8 +59,6 @@ java_library( ":autocodec-annotation", ":registered-singleton", ":unsafe-provider", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//third_party:auto_service", "//third_party:auto_value", @@ -86,8 +82,6 @@ pkg_tar( ":libautocodec-processor.jar": "third_party/bazel_bootstrap/libautocodec-processor.jar", ":libregistered-singleton.jar": "third_party/bazel_bootstrap/libregistered-singleton.jar", ":libunsafe-provider.jar": "third_party/bazel_bootstrap/libunsafe-provider.jar", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:libnestedset.jar": "third_party/bazel_bootstrap/libnestedset.jar", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset:libserialization.jar": "third_party/bazel_bootstrap/libnestedsetserialization.jar", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:libserialization.jar": "third_party/bazel_bootstrap/libserialization.jar", }, visibility = ["//visibility:public"], 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 1ab908cfab..692fb9904a 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 @@ -22,8 +22,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -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; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationCodeGenerator.Marshaller; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationCodeGenerator.PrimitiveValueSerializationCodeGenerator; @@ -542,41 +540,6 @@ class Marshallers { writeListDeserializationLoopAndBuild(context, repeated, builderName); } - private final Marshaller iterableMarshaller = - new Marshaller() { - @Override - public boolean matches(DeclaredType type) { - return matchesErased(type, Iterable.class); - } - - @Override - public void addSerializationCode(Context context) { - // A runtime check on the type of the Iterable. If its a NestedSet, we need to use the - // custom NestedSetCodec. - // TODO(cpeyser): Remove this runtime check once AutoCodec Runtime is available. Runtime - // checks in AutoCodec are very problematic because they will confuse the role of - // AutoCodec Runtime. - context.builder.beginControlFlow("if ($L instanceof $T)", context.name, NestedSet.class); - context.builder.addStatement("codedOut.writeBoolNoTag(true)"); // nested set - addSerializationCodeForNestedSet(context); - context.builder.nextControlFlow("else"); - context.builder.addStatement("codedOut.writeBoolNoTag(false)"); // not nested set - addSerializationCodeForIterable(context); - context.builder.endControlFlow(); - } - - @Override - public void addDeserializationCode(Context context) { - String isNestedSetName = context.makeName("isNestedSet"); - context.builder.addStatement("boolean $L = codedIn.readBool()", isNestedSetName); - context.builder.beginControlFlow("if ($L)", isNestedSetName); - addDeserializationCodeForNestedSet(context); - context.builder.nextControlFlow("else"); - addDeserializationCodeForIterable(context); - context.builder.endControlFlow(); - } - }; - private final Marshaller listMarshaller = new Marshaller() { @Override @@ -831,65 +794,6 @@ class Marshallers { } }; - private void addSerializationCodeForNestedSet(Context context) { - TypeMirror typeParameter = context.getDeclaredType().getTypeArguments().get(0); - if (typeParameter instanceof TypeVariable) { - typeParameter = ((TypeVariable) typeParameter).getUpperBound(); - } - String nestedSetCodec = context.makeName("nestedSetCodec"); - context.builder.addStatement( - "$T<$T> $L = new $T<>()", - NestedSetCodec.class, - typeParameter, - nestedSetCodec, - NestedSetCodec.class); - context.builder.addStatement( - "$L.serialize(context, ($T<$T>) $L, codedOut)", - nestedSetCodec, - NestedSet.class, - typeParameter, - context.name); - } - - private void addDeserializationCodeForNestedSet(Context context) { - TypeMirror typeParameter = context.getDeclaredType().getTypeArguments().get(0); - String nestedSetCodec = context.makeName("nestedSetCodec"); - if (typeParameter instanceof TypeVariable) { - typeParameter = ((TypeVariable) typeParameter).getUpperBound(); - } - context.builder.addStatement( - "$T<$T> $L = new $T<>()", - NestedSetCodec.class, - typeParameter, - nestedSetCodec, - NestedSetCodec.class); - context.builder.addStatement( - "$L = $L.deserialize(context, codedIn)", context.name, nestedSetCodec); - } - - private final Marshaller nestedSetMarshaller = - new Marshaller() { - @Override - public boolean matches(DeclaredType type) { - // env.getElementUtils().getTypeElement mysteriously does not recognize NestedSet, so we - // do String comparison. - return env.getTypeUtils() - .erasure(type) - .toString() - .equals("com.google.devtools.build.lib.collect.nestedset.NestedSet"); - } - - @Override - public void addSerializationCode(Context context) { - addSerializationCodeForNestedSet(context); - } - - @Override - public void addDeserializationCode(Context context) { - addDeserializationCodeForNestedSet(context); - } - }; - /** Delegates marshalling back to the context. */ private final Marshaller contextMarshaller = new Marshaller() { @@ -955,10 +859,8 @@ class Marshallers { immutableSortedSetMarshaller, mapMarshaller, multimapMarshaller, - nestedSetMarshaller, patternMarshaller, protoMarshaller, - iterableMarshaller, charsetMarshaller, contextMarshaller); |