diff options
Diffstat (limited to 'src/main/java/com/google')
4 files changed, 60 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java index 39343a2403..c0503cb8cf 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java @@ -40,6 +40,7 @@ import javax.annotation.Nullable; * * <p>This class is an implementation detail of {@link DirectoryListingValue}. */ +@AutoCodec.VisibleForSerialization public final class DirectoryListingStateValue implements SkyValue { private final CompactSortedDirents compactSortedDirents; @@ -48,6 +49,7 @@ public final class DirectoryListingStateValue implements SkyValue { this.compactSortedDirents = CompactSortedDirents.create(dirents); } + @AutoCodec.Instantiator public static DirectoryListingStateValue create(Collection<Dirent> dirents) { return new DirectoryListingStateValue(dirents); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java index 866bbb4cd4..655caddf5e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.packages.AdvertisedProviderSet; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.util.StringCanonicalizer; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -38,6 +39,7 @@ import javax.annotation.Nullable; */ @Immutable @ThreadSafe +@AutoCodec public abstract class TransitiveTraversalValue implements SkyValue { // A quick-lookup cache that allows us to get the value for a given target kind, assuming no error // messages for the target. The number of built-in target kinds is limited, so memory bloat is not @@ -97,6 +99,7 @@ public abstract class TransitiveTraversalValue implements SkyValue { } } + @AutoCodec.Instantiator public static TransitiveTraversalValue create( AdvertisedProviderSet providers, String kind, @Nullable String firstErrorMessage) { TransitiveTraversalValue value = diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSetRuntimeCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSetRuntimeCodec.java new file mode 100644 index 0000000000..5a6a487909 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSetRuntimeCodec.java @@ -0,0 +1,53 @@ +// 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.ImmutableSet; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; + +/** {@link ObjectCodec} for {@link ImmutableSet}. */ +@SuppressWarnings("rawtypes") // Intentional erasure of ImmutableSet. +class ImmutableSetRuntimeCodec implements ObjectCodec<ImmutableSet> { + @Override + public Class<ImmutableSet> getEncodedClass() { + return ImmutableSet.class; + } + + @Override + public void serialize( + SerializationContext context, ImmutableSet object, CodedOutputStream codedOut) + throws SerializationException, IOException { + codedOut.writeInt32NoTag(object.size()); + for (Object obj : object) { + context.serialize(obj, codedOut); + } + } + + @SuppressWarnings("unchecked") // Adding object to untyped builder. + @Override + public ImmutableSet deserialize(DeserializationContext context, CodedInputStream codedIn) + throws SerializationException, IOException { + int size = codedIn.readInt32(); + ImmutableSet.Builder builder = ImmutableSet.builderWithExpectedSize(size); + for (int i = 0; i < size; i++) { + // Don't inline so builder knows this is an object, not an array. + Object item = context.deserialize(codedIn); + builder.add(item); + } + return builder.build(); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java b/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java index f93a0b1aef..27a69efcf4 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java @@ -14,10 +14,12 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import java.io.Serializable; import java.util.Objects; /** Directory entry representation returned by {@link Path#readdir}. */ +@AutoCodec public final class Dirent implements Serializable, Comparable<Dirent> { /** Type of the directory entry */ public enum Type { |