aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-06 14:05:58 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-06 14:07:38 -0800
commitfcb67e94b54b8ee55563bc75b5ae2d21295d7260 (patch)
tree521a5254d66d621b26cb0ddcdb0448fff2d7bec0 /src/main/java/com/google
parente00a2b191a45e1efd24f2d491b8abd49235c9db1 (diff)
@AutoCodec TransitiveTraversalValue, DirectoryListingStateValue.
PiperOrigin-RevId: 188077900
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSetRuntimeCodec.java53
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/Dirent.java2
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 {