diff options
Diffstat (limited to 'src')
7 files changed, 58 insertions, 96 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java index 8107714e33..dc94ea8574 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java @@ -17,7 +17,6 @@ package com.google.devtools.build.lib.cmdline; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.devtools.build.lib.vfs.PathFragmentCodec; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; @@ -26,7 +25,6 @@ import java.io.IOException; public class PackageIdentifierCodec implements ObjectCodec<PackageIdentifier> { private final RepositoryNameCodec repoNameCodec = new RepositoryNameCodec(); - private final PathFragmentCodec pathFragmentCodec = new PathFragmentCodec(); @Override public Class<PackageIdentifier> getEncodedClass() { @@ -37,14 +35,14 @@ public class PackageIdentifierCodec implements ObjectCodec<PackageIdentifier> { public void serialize(PackageIdentifier pkgId, CodedOutputStream codedOut) throws IOException, SerializationException { repoNameCodec.serialize(pkgId.getRepository(), codedOut); - pathFragmentCodec.serialize(pkgId.getPackageFragment(), codedOut); + PathFragment.CODEC.serialize(pkgId.getPackageFragment(), codedOut); } @Override public PackageIdentifier deserialize(CodedInputStream codedIn) throws IOException, SerializationException { RepositoryName repoName = repoNameCodec.deserialize(codedIn); - PathFragment pathFragment = pathFragmentCodec.deserialize(codedIn); + PathFragment pathFragment = PathFragment.CODEC.deserialize(codedIn); return PackageIdentifier.create(repoName, pathFragment); } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/BUILD b/src/main/java/com/google/devtools/build/lib/vfs/BUILD index 7beb483fa3..88c7c86490 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/BUILD +++ b/src/main/java/com/google/devtools/build/lib/vfs/BUILD @@ -9,7 +9,6 @@ filegroup( PATH_FRAGMENT_SOURCES = [ "Canonicalizer.java", "PathFragment.java", - "PathFragmentCodec.java", "PathFragmentSerializationProxy.java", "UnixPathFragment.java", "WindowsPathFragment.java", 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 872466316d..ee0ef364e3 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 @@ -25,12 +25,10 @@ import java.io.IOException; public class PathCodec implements ObjectCodec<Path> { private final FileSystem fileSystem; - private final PathFragmentCodec pathFragmentCodec; /** Create an instance for serializing and deserializing {@link Path}s on {@code fileSystem}. */ public PathCodec(FileSystem fileSystem) { this.fileSystem = fileSystem; - this.pathFragmentCodec = new PathFragmentCodec(); } @Override @@ -46,12 +44,12 @@ public class PathCodec implements ObjectCodec<Path> { "Path's FileSystem (%s) did not match the configured FileSystem (%s)", path.getFileSystem(), fileSystem); - pathFragmentCodec.serialize(path.asFragment(), codedOut); + PathFragment.CODEC.serialize(path.asFragment(), codedOut); } @Override public Path deserialize(CodedInputStream codedIn) throws IOException, SerializationException { - PathFragment pathFragment = pathFragmentCodec.deserialize(codedIn); + PathFragment pathFragment = PathFragment.CODEC.deserialize(codedIn); return fileSystem.getPath(pathFragment); } } 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 da3846cd9f..05e4ee86c8 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 @@ -21,11 +21,17 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +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; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.util.StringCanonicalizer; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; import java.io.File; +import java.io.IOException; import java.io.InvalidObjectException; import java.io.ObjectInputStream; import java.io.Serializable; @@ -65,6 +71,8 @@ public abstract class PathFragment /** The path fragment representing the root directory. */ public static final PathFragment ROOT_FRAGMENT = create(ROOT_DIR); + public static final ObjectCodec<PathFragment> CODEC = new PathFragmentCodec(); + /** * A helper object for manipulating the various internal {@link PathFragment} implementations. * @@ -743,6 +751,39 @@ public abstract class PathFragment printer.append(getPathString()); } + private static class PathFragmentCodec implements ObjectCodec<PathFragment> { + private final ObjectCodec<String> stringCodec = StringCodecs.asciiOptimized(); + + @Override + public Class<PathFragment> getEncodedClass() { + return PathFragment.class; + } + + @Override + public void serialize(PathFragment pathFragment, CodedOutputStream codedOut) + throws IOException, SerializationException { + codedOut.writeInt32NoTag(pathFragment.getDriveLetter()); + codedOut.writeBoolNoTag(pathFragment.isAbsolute()); + codedOut.writeInt32NoTag(pathFragment.segmentCount()); + for (int i = 0; i < pathFragment.segmentCount(); i++) { + stringCodec.serialize(pathFragment.getSegment(i), codedOut); + } + } + + @Override + public PathFragment deserialize(CodedInputStream codedIn) + throws IOException, SerializationException { + char driveLetter = (char) codedIn.readInt32(); + boolean isAbsolute = codedIn.readBool(); + int segmentCount = codedIn.readInt32(); + String[] segments = new String[segmentCount]; + for (int i = 0; i < segmentCount; i++) { + segments[i] = stringCodec.deserialize(codedIn); + } + return PathFragment.create(driveLetter, isAbsolute, segments); + } + } + private static void checkBaseName(String baseName) { if (baseName.length() == 0) { throw new IllegalArgumentException("Child must not be empty string ('')"); diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java deleted file mode 100644 index 2c0f493fc8..0000000000 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2017 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.vfs; - -import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; -import com.google.devtools.build.lib.skyframe.serialization.SerializationException; -import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs; -import com.google.protobuf.CodedInputStream; -import com.google.protobuf.CodedOutputStream; -import java.io.IOException; - -/** Custom serialization for {@link PathFragment}s. */ -public class PathFragmentCodec implements ObjectCodec<PathFragment> { - - private final ObjectCodec<String> stringCodec = StringCodecs.asciiOptimized(); - - @Override - public Class<PathFragment> getEncodedClass() { - return PathFragment.class; - } - - @Override - public void serialize(PathFragment pathFragment, CodedOutputStream codedOut) - throws IOException, SerializationException { - codedOut.writeInt32NoTag(pathFragment.getDriveLetter()); - codedOut.writeBoolNoTag(pathFragment.isAbsolute()); - codedOut.writeInt32NoTag(pathFragment.segmentCount()); - for (int i = 0; i < pathFragment.segmentCount(); i++) { - stringCodec.serialize(pathFragment.getSegment(i), codedOut); - } - } - - @Override - public PathFragment deserialize(CodedInputStream codedIn) - throws IOException, SerializationException { - char driveLetter = (char) codedIn.readInt32(); - boolean isAbsolute = codedIn.readBool(); - int segmentCount = codedIn.readInt32(); - String[] segments = new String[segmentCount]; - for (int i = 0; i < segmentCount; i++) { - segments[i] = stringCodec.deserialize(codedIn); - } - return PathFragment.create(driveLetter, isAbsolute, segments); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java deleted file mode 100644 index 52490c719a..0000000000 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2017 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.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; -import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.devtools.build.lib.vfs.PathFragmentCodec; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** Basic tests for {@link PathFragmentCodec}. */ -@RunWith(JUnit4.class) -public class PathFragmentCodecTest extends AbstractObjectCodecTest<PathFragment> { - - public PathFragmentCodecTest() { - super(new PathFragmentCodec(), PathFragment.create("/a/path/fragment/with/lots/of/parts")); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java index bce569f887..41954851be 100644 --- a/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java +++ b/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.vfs; +import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; @@ -20,6 +21,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.testing.EqualsTester; +import com.google.devtools.build.lib.skyframe.serialization.testutils.ObjectCodecTester; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; import java.io.File; @@ -550,6 +552,17 @@ public class PathFragmentTest { } @Test + public void testCodec() throws Exception { + ObjectCodecTester.newBuilder(PathFragment.CODEC) + .addSubjects( + ImmutableList.of("", "a", "/foo", "foo/bar/baz", "/a/path/fragment/with/lots/of/parts") + .stream() + .map(PathFragment::create) + .collect(toImmutableList())) + .buildAndRunTests(); + } + + @Test public void testSerializationSimple() throws Exception { checkSerialization("a", 91); } |