aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java41
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java57
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java30
-rw-r--r--src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java13
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);
}