diff options
author | michajlo <michajlo@google.com> | 2018-02-11 09:23:55 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-11 09:25:41 -0800 |
commit | e45c0555cfb15ce403ff2f447edb74495a633ec1 (patch) | |
tree | 28c7a697306b91d00a49602b991aea9476c65892 /src/main/java/com/google/devtools/build/lib/vfs | |
parent | e3bbfdb839a483f1a418a94d857c25794006fbe0 (diff) |
Add context argument to ObjectCodec.{serialize,deserialize}
Context implementations are currently empty, just doing the plumbing in this
change. Once this is in we can start passing along the ObjectCodecRegistry, which
will allow runtime codec resolution for classes not known at compile time.
We'll also inevitably add some memoization helpers, allowing us to optimize the
serialization process further.
PiperOrigin-RevId: 185305674
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/vfs')
5 files changed, 45 insertions, 22 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Path.java b/src/main/java/com/google/devtools/build/lib/vfs/Path.java index 075c47bd07..649eea9256 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/Path.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/Path.java @@ -15,8 +15,10 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; +import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; import com.google.devtools.build.lib.skyframe.serialization.InjectingObjectCodec; 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.strings.StringCodecs; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrintable; @@ -915,17 +917,22 @@ public class Path } @Override - public void serialize(FileSystemProvider fsProvider, Path path, CodedOutputStream codedOut) + public void serialize( + FileSystemProvider fsProvider, + SerializationContext context, + Path path, + CodedOutputStream codedOut) throws IOException, SerializationException { Preconditions.checkArgument(path.getFileSystem() == fsProvider.getFileSystem()); - stringCodec.serialize(path.getPathString(), codedOut); + stringCodec.serialize(context, path.getPathString(), codedOut); } @Override - public Path deserialize(FileSystemProvider fsProvider, CodedInputStream codedIn) + public Path deserialize( + FileSystemProvider fsProvider, DeserializationContext context, CodedInputStream codedIn) throws IOException, SerializationException { return Path.createAlreadyNormalized( - stringCodec.deserialize(codedIn), fsProvider.getFileSystem()); + stringCodec.deserialize(context, codedIn), fsProvider.getFileSystem()); } } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java b/src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java index c7644ed960..6180572b24 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java @@ -15,7 +15,9 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; +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.strings.StringCodecs; import com.google.protobuf.CodedInputStream; @@ -39,7 +41,7 @@ public class PathCodec implements ObjectCodec<Path> { } @Override - public void serialize(Path path, CodedOutputStream codedOut) + public void serialize(SerializationContext context, Path path, CodedOutputStream codedOut) throws IOException, SerializationException { Preconditions.checkState( path.getFileSystem() == fileSystem, @@ -47,11 +49,12 @@ public class PathCodec implements ObjectCodec<Path> { path.getFileSystem(), fileSystem, path); - stringCodec.serialize(path.getPathString(), codedOut); + stringCodec.serialize(context, path.getPathString(), codedOut); } @Override - public Path deserialize(CodedInputStream codedIn) throws IOException, SerializationException { - return fileSystem.getPath(stringCodec.deserialize(codedIn)); + public Path deserialize(DeserializationContext context, CodedInputStream codedIn) + throws IOException, SerializationException { + return fileSystem.getPath(stringCodec.deserialize(context, codedIn)); } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java index 88ae732590..2a5eed8552 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java @@ -16,7 +16,9 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.actions.CommandLineItem; +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.strings.StringCodecs; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrintable; @@ -732,15 +734,16 @@ public final class PathFragment } @Override - public void serialize(PathFragment pathFragment, CodedOutputStream codedOut) + public void serialize( + SerializationContext context, PathFragment pathFragment, CodedOutputStream codedOut) throws IOException, SerializationException { - stringCodec.serialize(pathFragment.getPathString(), codedOut); + stringCodec.serialize(context, pathFragment.getPathString(), codedOut); } @Override - public PathFragment deserialize(CodedInputStream codedIn) + public PathFragment deserialize(DeserializationContext context, CodedInputStream codedIn) throws IOException, SerializationException { - return PathFragment.createAlreadyNormalized(stringCodec.deserialize(codedIn)); + return PathFragment.createAlreadyNormalized(stringCodec.deserialize(context, codedIn)); } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Root.java b/src/main/java/com/google/devtools/build/lib/vfs/Root.java index 0df98c0c9c..73ff687b56 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/Root.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/Root.java @@ -15,7 +15,9 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Objects; import com.google.common.base.Preconditions; +import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; import com.google.devtools.build.lib.skyframe.serialization.InjectingObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationContext; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; @@ -263,11 +265,15 @@ public interface Root extends Comparable<Root>, Serializable { } @Override - public void serialize(FileSystemProvider dependency, Root obj, CodedOutputStream codedOut) + public void serialize( + FileSystemProvider dependency, + SerializationContext context, + Root obj, + CodedOutputStream codedOut) throws SerializationException, IOException { if (obj instanceof PathRoot) { codedOut.writeBoolNoTag(false); - Path.CODEC.serialize(dependency, ((PathRoot) obj).path, codedOut); + Path.CODEC.serialize(dependency, context, ((PathRoot) obj).path, codedOut); } else if (obj instanceof AbsoluteRoot) { Preconditions.checkArgument(((AbsoluteRoot) obj).fileSystem == dependency.getFileSystem()); codedOut.writeBoolNoTag(true); @@ -277,13 +283,14 @@ public interface Root extends Comparable<Root>, Serializable { } @Override - public Root deserialize(FileSystemProvider dependency, CodedInputStream codedIn) + public Root deserialize( + FileSystemProvider dependency, DeserializationContext context, CodedInputStream codedIn) throws SerializationException, IOException { boolean isAbsolute = codedIn.readBool(); if (isAbsolute) { return dependency.getFileSystem().getAbsoluteRoot(); } else { - Path path = Path.CODEC.deserialize(dependency, codedIn); + Path path = Path.CODEC.deserialize(dependency, context, codedIn); return new PathRoot(path); } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java b/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java index 82335c7921..aa3153463d 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java @@ -14,8 +14,10 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; +import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; import com.google.devtools.build.lib.skyframe.serialization.InjectingObjectCodecAdapter; 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.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; @@ -138,17 +140,18 @@ public class RootedPath implements Serializable { } @Override - public void serialize(RootedPath rootedPath, CodedOutputStream codedOut) + public void serialize( + SerializationContext context, RootedPath rootedPath, CodedOutputStream codedOut) throws IOException, SerializationException { - rootCodec.serialize(rootedPath.getRoot(), codedOut); - PathFragment.CODEC.serialize(rootedPath.getRootRelativePath(), codedOut); + rootCodec.serialize(context, rootedPath.getRoot(), codedOut); + PathFragment.CODEC.serialize(context, rootedPath.getRootRelativePath(), codedOut); } @Override - public RootedPath deserialize(CodedInputStream codedIn) + public RootedPath deserialize(DeserializationContext context, CodedInputStream codedIn) throws IOException, SerializationException { - Root root = rootCodec.deserialize(codedIn); - PathFragment rootRelativePath = PathFragment.CODEC.deserialize(codedIn); + Root root = rootCodec.deserialize(context, codedIn); + PathFragment rootRelativePath = PathFragment.CODEC.deserialize(context, codedIn); return toRootedPath(root, rootRelativePath); } } |