Removes skyframe/serialization's dependency on cmdline and vfs. Instead, make cmdline and vfs depend on serialization. This allows a class to have a pointer to its codec, which simplifies automatic recursive composite codecs. PiperOrigin-RevId: 178683500
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java index ac4a005..66c0f14 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
@@ -18,11 +18,11 @@ import com.google.common.hash.HashCode; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.skyframe.serialization.PathCodec; 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.util.StringCanonicalizer; import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.PathCodec; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; @@ -52,8 +52,7 @@ // Include directory name, relative to execRoot/blaze-out/configuration. public static final String RELATIVE_INCLUDE_DIR = StringCanonicalizer.intern("include"); - @VisibleForTesting - static final String DEFAULT_EXEC_ROOT = "default-exec-root"; + @VisibleForTesting static final String DEFAULT_EXEC_ROOT = "default-exec-root"; private final ServerDirectories serverDirectories; /** Workspace root and server CWD. */ @@ -67,10 +66,7 @@ private final Path localOutputPath; private final String productName; - public BlazeDirectories( - ServerDirectories serverDirectories, - Path workspace, - String productName) { + public BlazeDirectories(ServerDirectories serverDirectories, Path workspace, String productName) { this.serverDirectories = serverDirectories; this.workspace = workspace; this.productName = productName; @@ -94,38 +90,34 @@ } /** - * Returns the base of the output tree, which hosts all build and scratch - * output for a user and workspace. + * Returns the base of the output tree, which hosts all build and scratch output for a user and + * workspace. */ public Path getInstallBase() { return serverDirectories.getInstallBase(); } - /** - * Returns the workspace directory, which is also the working dir of the server. - */ + /** Returns the workspace directory, which is also the working dir of the server. */ public Path getWorkspace() { return workspace; } - /** - * Returns if the workspace directory is a valid workspace. - */ + /** Returns if the workspace directory is a valid workspace. */ public boolean inWorkspace() { return this.workspace != null; } /** - * Returns the base of the output tree, which hosts all build and scratch - * output for a user and workspace. + * Returns the base of the output tree, which hosts all build and scratch output for a user and + * workspace. */ public Path getOutputBase() { return serverDirectories.getOutputBase(); } /** - * Returns the execution root for the main package. This is created before the workspace file - * has been read, so it has an incorrect path. Use {@link #getExecRoot(String)} instead. + * Returns the execution root for the main package. This is created before the workspace file has + * been read, so it has an incorrect path. Use {@link #getExecRoot(String)} instead. */ @Deprecated public Path getExecRoot() { @@ -150,16 +142,12 @@ return outputPath; } - /** - * Returns the output path used by this Blaze instance. - */ + /** Returns the output path used by this Blaze instance. */ public Path getOutputPath(String workspaceName) { return getExecRoot(workspaceName).getRelative(getRelativeOutputPath()); } - /** - * Returns the local output path used by this Blaze instance. - */ + /** Returns the local output path used by this Blaze instance. */ public Path getLocalOutputPath() { return localOutputPath; } @@ -172,10 +160,7 @@ return execRoot.getRelative(getRelativeOutputPath()).getRelative("_tmp/action_outs"); } - /** - * Returns the installed embedded binaries directory, under the shared - * installBase location. - */ + /** Returns the installed embedded binaries directory, under the shared installBase location. */ public Path getEmbeddedBinariesRoot() { return serverDirectories.getEmbeddedBinariesRoot(); } @@ -185,14 +170,13 @@ * {@link BlazeDirectories} of this server instance. Nothing else should be placed here. */ public Root getBuildDataDirectory(String workspaceName) { - return Root - .asDerivedRoot(getExecRoot(workspaceName), getOutputPath(workspaceName), true); + return Root.asDerivedRoot(getExecRoot(workspaceName), getOutputPath(workspaceName), true); } - /** - * Returns the MD5 content hash of the blaze binary (includes deploy JAR, embedded binaries, and - * anything else that ends up in the install_base). - */ + /** + * Returns the MD5 content hash of the blaze binary (includes deploy JAR, embedded binaries, and + * anything else that ends up in the install_base). + */ public HashCode getInstallMD5() { return serverDirectories.getInstallMD5(); } @@ -206,8 +190,8 @@ } /** - * Returns the output directory name, relative to the execRoot. - * TODO(bazel-team): (2011) make this private? + * Returns the output directory name, relative to the execRoot. TODO(bazel-team): (2011) make this + * private? */ public static String getRelativeOutputPath(String productName) { return StringCanonicalizer.intern(productName + "-out");
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java index 3b62084..cf9e65e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesCodec.java
@@ -15,8 +15,8 @@ package com.google.devtools.build.lib.analysis; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; -import com.google.devtools.build.lib.skyframe.serialization.PathCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; +import com.google.devtools.build.lib.vfs.PathCodec; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java index e296fb3..788e3ab 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
@@ -19,9 +19,9 @@ import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.skyframe.serialization.PathCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.PathCodec; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; @@ -62,38 +62,33 @@ } private static HashCode checkMD5(HashCode hash) { - Preconditions.checkArgument(hash.bits() == Hashing.md5().bits(), - "Hash '%s' has %s bits", hash, hash.bits()); + Preconditions.checkArgument( + hash.bits() == Hashing.md5().bits(), "Hash '%s' has %s bits", hash, hash.bits()); return hash; } - /** - * Returns the installation base directory. Currently used by info command only. - */ + /** Returns the installation base directory. Currently used by info command only. */ public Path getInstallBase() { return installBase; } /** - * Returns the base of the output tree, which hosts all build and scratch - * output for a user and workspace. + * Returns the base of the output tree, which hosts all build and scratch output for a user and + * workspace. */ public Path getOutputBase() { return outputBase; } - /** - * Returns the installed embedded binaries directory, under the shared - * installBase location. - */ + /** Returns the installed embedded binaries directory, under the shared installBase location. */ public Path getEmbeddedBinariesRoot() { return installBase.getChild("_embedded_binaries"); } - /** - * Returns the MD5 content hash of the blaze binary (includes deploy JAR, embedded binaries, and - * anything else that ends up in the install_base). - */ + /** + * Returns the MD5 content hash of the blaze binary (includes deploy JAR, embedded binaries, and + * anything else that ends up in the install_base). + */ public HashCode getInstallMD5() { return installMD5; }
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/BUILD b/src/main/java/com/google/devtools/build/lib/cmdline/BUILD index 306eba1..2883d42 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/BUILD +++ b/src/main/java/com/google/devtools/build/lib/cmdline/BUILD
@@ -21,9 +21,11 @@ "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//third_party:guava", "//third_party:jsr305", + "//third_party/protobuf:protobuf_java", ], )
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodec.java b/src/main/java/com/google/devtools/build/lib/cmdline/LabelCodec.java similarity index 89% rename from src/main/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodec.java rename to src/main/java/com/google/devtools/build/lib/cmdline/LabelCodec.java index 89978ba..cda83db 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodec.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/LabelCodec.java
@@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.skyframe.serialization; +package com.google.devtools.build.lib.cmdline; -import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.cmdline.PackageIdentifier; +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;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodec.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java similarity index 83% rename from src/main/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodec.java rename to src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java index 73aede6..8107714 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodec.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifierCodec.java
@@ -12,17 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.skyframe.serialization; +package com.google.devtools.build.lib.cmdline; -import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.cmdline.RepositoryName; +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; /** Custom serialization logic for {@link PackageIdentifier}s. */ -class PackageIdentifierCodec implements ObjectCodec<PackageIdentifier> { +public class PackageIdentifierCodec implements ObjectCodec<PackageIdentifier> { private final RepositoryNameCodec repoNameCodec = new RepositoryNameCodec(); private final PathFragmentCodec pathFragmentCodec = new PathFragmentCodec();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodec.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryNameCodec.java similarity index 62% rename from src/main/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodec.java rename to src/main/java/com/google/devtools/build/lib/cmdline/RepositoryNameCodec.java index c9d0976..67a6c55 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodec.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryNameCodec.java
@@ -12,16 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.skyframe.serialization; +package com.google.devtools.build.lib.cmdline; -import com.google.devtools.build.lib.cmdline.LabelSyntaxException; -import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; +import com.google.protobuf.ByteString; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; /** Custom serialization for {@link RepositoryName}. */ -class RepositoryNameCodec implements ObjectCodec<RepositoryName> { +public class RepositoryNameCodec implements ObjectCodec<RepositoryName> { @Override public Class<RepositoryName> getEncodedClass() { @@ -48,9 +49,26 @@ } try { // We can read the string we wrote back as bytes to avoid string decoding/copying. - return SerializationCommonUtils.deserializeRepoName(codedIn.readBytes()); + return deserializeRepoName(codedIn.readBytes()); } catch (LabelSyntaxException e) { throw new SerializationException("Failed to deserialize RepositoryName", e); } } + + private static final ByteString DEFAULT_REPOSITORY = + ByteString.copyFromUtf8(RepositoryName.DEFAULT.getName()); + private static final ByteString MAIN_REPOSITORY = + ByteString.copyFromUtf8(RepositoryName.MAIN.getName()); + + public static RepositoryName deserializeRepoName(ByteString repoNameBytes) + throws LabelSyntaxException { + // We expect MAIN_REPOSITORY the vast majority of the time, so check for it first. + if (repoNameBytes.equals(MAIN_REPOSITORY)) { + return RepositoryName.MAIN; + } else if (repoNameBytes.equals(DEFAULT_REPOSITORY)) { + return RepositoryName.DEFAULT; + } else { + return RepositoryName.create(repoNameBytes.toStringUtf8()); + } + } }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java index 14fb440..73a54fc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -25,11 +25,11 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter; import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.LabelCodec; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher; import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType; import com.google.devtools.build.lib.skyframe.serialization.EnumCodec; -import com.google.devtools.build.lib.skyframe.serialization.LabelCodec; 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.SkylarkModule; @@ -47,9 +47,7 @@ import java.io.IOException; import java.util.List; -/** - * Command-line options for building for Apple platforms. - */ +/** Command-line options for building for Apple platforms. */ public class AppleCommandLineOptions extends FragmentOptions { @Option( @@ -57,7 +55,7 @@ defaultValue = "false", category = "experimental", documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, - effectTags = { OptionEffectTag.LOSES_INCREMENTAL_STATE, OptionEffectTag.BUILD_FILE_SEMANTICS }, + effectTags = {OptionEffectTag.LOSES_INCREMENTAL_STATE, OptionEffectTag.BUILD_FILE_SEMANTICS}, help = "Whether Apple rules must have a mandatory minimum_os_version attribute." ) // TODO(b/37096178): This flag should be default-on and then be removed. @@ -68,9 +66,10 @@ defaultValue = "true", category = "experimental", documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, - effectTags = { OptionEffectTag.LOSES_INCREMENTAL_STATE, OptionEffectTag.BUILD_FILE_SEMANTICS }, - help = "Whether Apple rules which control linking should propagate objc provider at the top " - + "level" + effectTags = {OptionEffectTag.LOSES_INCREMENTAL_STATE, OptionEffectTag.BUILD_FILE_SEMANTICS}, + help = + "Whether Apple rules which control linking should propagate objc provider at the top " + + "level" ) // TODO(b/32411441): This flag should be default-off and then be removed. public boolean objcProviderFromLinked; @@ -181,19 +180,13 @@ @VisibleForTesting public static final String DEFAULT_TVOS_SDK_VERSION = "9.0"; @VisibleForTesting static final String DEFAULT_IOS_CPU = "x86_64"; - /** - * The default watchos CPU value. - */ + /** The default watchos CPU value. */ public static final String DEFAULT_WATCHOS_CPU = "i386"; - /** - * The default tvOS CPU value. - */ + /** The default tvOS CPU value. */ public static final String DEFAULT_TVOS_CPU = "x86_64"; - /** - * The default macOS CPU value. - */ + /** The default macOS CPU value. */ public static final String DEFAULT_MACOS_CPU = "x86_64"; @Option( @@ -387,24 +380,27 @@ ) public boolean targetUsesAppleCrosstool; - /** - * Returns whether the minimum OS version is explicitly set for the current platform. - */ + /** Returns whether the minimum OS version is explicitly set for the current platform. */ public DottedVersion getMinimumOsVersion() { switch (applePlatformType) { - case IOS: return iosMinimumOs; - case MACOS: return macosMinimumOs; - case TVOS: return tvosMinimumOs; - case WATCHOS: return watchosMinimumOs; - default: throw new IllegalStateException(); + case IOS: + return iosMinimumOs; + case MACOS: + return macosMinimumOs; + case TVOS: + return tvosMinimumOs; + case WATCHOS: + return watchosMinimumOs; + default: + throw new IllegalStateException(); } } /** * Returns the architecture implied by these options. * - * <p> In contexts in which a configuration instance is present, prefer - * {@link AppleConfiguration#getSingleArchitecture}. + * <p>In contexts in which a configuration instance is present, prefer {@link + * AppleConfiguration#getSingleArchitecture}. */ public String getSingleArchitecture() { if (!Strings.isNullOrEmpty(appleSplitCpu)) { @@ -440,12 +436,13 @@ @SkylarkModule( name = "apple_bitcode_mode", category = SkylarkModuleCategory.NONE, - doc = "The Bitcode mode to use when compiling Objective-C and Swift code on Apple platforms. " - + "Possible values are:<br><ul>" - + "<li><code>'none'</code></li>" - + "<li><code>'embedded'</code></li>" - + "<li><code>'embedded_markers'</code></li>" - + "</ul>" + doc = + "The Bitcode mode to use when compiling Objective-C and Swift code on Apple platforms. " + + "Possible values are:<br><ul>" + + "<li><code>'none'</code></li>" + + "<li><code>'embedded'</code></li>" + + "<li><code>'embedded_markers'</code></li>" + + "</ul>" ) @Immutable public enum AppleBitcodeMode implements SkylarkValue { @@ -488,16 +485,14 @@ } /** - * Returns the flags that should be added to compile and link actions to use this - * bitcode setting. + * Returns the flags that should be added to compile and link actions to use this bitcode + * setting. */ public ImmutableList<String> getCompileAndLinkFlags() { return clangFlags; } - /** - * Converts to {@link AppleBitcodeMode}. - */ + /** Converts to {@link AppleBitcodeMode}. */ public static class Converter extends EnumConverter<AppleBitcodeMode> { public Converter() { super(AppleBitcodeMode.class, "apple bitcode mode"); @@ -597,8 +592,7 @@ } /** Flag converter for {@link PlatformType}. */ - public static final class PlatformTypeConverter - extends EnumConverter<PlatformType> { + public static final class PlatformTypeConverter extends EnumConverter<PlatformType> { public PlatformTypeConverter() { super(PlatformType.class, "Apple platform type"); }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionKeyCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionKeyCodec.java index c32a0f8..d466391 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionKeyCodec.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestSuiteExpansionKeyCodec.java
@@ -15,8 +15,8 @@ import com.google.common.collect.ImmutableSortedSet; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.LabelCodec; import com.google.devtools.build.lib.skyframe.TestSuiteExpansionValue.TestSuiteExpansionKey; -import com.google.devtools.build.lib.skyframe.serialization.LabelCodec; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.protobuf.CodedInputStream;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD index 10c813d..bb25cbc 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
@@ -11,8 +11,6 @@ name = "serialization", srcs = glob(["**/*.java"]), deps = [ - "//src/main/java/com/google/devtools/build/lib/cmdline", - "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//third_party:guava", "//third_party/protobuf:protobuf_java",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationCommonUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationCommonUtils.java index 85abc95..b5baec0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationCommonUtils.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationCommonUtils.java
@@ -14,10 +14,7 @@ package com.google.devtools.build.lib.skyframe.serialization; -import com.google.devtools.build.lib.cmdline.LabelSyntaxException; -import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs; -import com.google.protobuf.ByteString; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; @@ -26,22 +23,6 @@ public class SerializationCommonUtils { public static final ImmutableListCodec<String> STRING_LIST_CODEC = new ImmutableListCodec<>(StringCodecs.asciiOptimized()); - private static final ByteString DEFAULT_REPOSITORY = - ByteString.copyFromUtf8(RepositoryName.DEFAULT.getName()); - private static final ByteString MAIN_REPOSITORY = - ByteString.copyFromUtf8(RepositoryName.MAIN.getName()); - - public static RepositoryName deserializeRepoName(ByteString repoNameBytes) - throws LabelSyntaxException { - // We expect MAIN_REPOSITORY the vast majority of the time, so check for it first. - if (repoNameBytes.equals(MAIN_REPOSITORY)) { - return RepositoryName.MAIN; - } else if (repoNameBytes.equals(DEFAULT_REPOSITORY)) { - return RepositoryName.DEFAULT; - } else { - return RepositoryName.create(repoNameBytes.toStringUtf8()); - } - } public static <T> void serializeNullable(T obj, CodedOutputStream out, ObjectCodec<T> codec) throws IOException, SerializationException {
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 bd52ab8..95b9ca8 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/BUILD +++ b/src/main/java/com/google/devtools/build/lib/vfs/BUILD
@@ -9,6 +9,7 @@ PATH_FRAGMENT_SOURCES = [ "Canonicalizer.java", "PathFragment.java", + "PathFragmentCodec.java", "PathFragmentSerializationProxy.java", "UnixPathFragment.java", "WindowsPathFragment.java", @@ -22,7 +23,9 @@ "//src/main/java/com/google/devtools/build/lib:os_util", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//third_party:guava", + "//third_party/protobuf:protobuf_java", ], ) @@ -47,8 +50,10 @@ "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/profiler", "//src/main/java/com/google/devtools/build/lib/shell", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/common/options", "//third_party:guava", "//third_party:jsr305", + "//third_party/protobuf:protobuf_java", ], )
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PathCodec.java b/src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java similarity index 83% rename from src/main/java/com/google/devtools/build/lib/skyframe/serialization/PathCodec.java rename to src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java index 5c44f9c..8724663 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PathCodec.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathCodec.java
@@ -12,12 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.skyframe.serialization; +package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; -import com.google.devtools.build.lib.vfs.FileSystem; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; @@ -29,7 +28,7 @@ private final PathFragmentCodec pathFragmentCodec; /** Create an instance for serializing and deserializing {@link Path}s on {@code fileSystem}. */ - PathCodec(FileSystem fileSystem) { + public PathCodec(FileSystem fileSystem) { this.fileSystem = fileSystem; this.pathFragmentCodec = new PathFragmentCodec(); } @@ -51,8 +50,7 @@ } @Override - public Path deserialize(CodedInputStream codedIn) - throws IOException, SerializationException { + public Path deserialize(CodedInputStream codedIn) throws IOException, SerializationException { PathFragment pathFragment = pathFragmentCodec.deserialize(codedIn); return fileSystem.getPath(pathFragment); }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodec.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java similarity index 87% rename from src/main/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodec.java rename to src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java index a2f9e25..2c0f493 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodec.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentCodec.java
@@ -12,16 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.skyframe.serialization; +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.devtools.build.lib.vfs.PathFragment; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; /** Custom serialization for {@link PathFragment}s. */ -class PathFragmentCodec implements ObjectCodec<PathFragment> { +public class PathFragmentCodec implements ObjectCodec<PathFragment> { private final ObjectCodec<String> stringCodec = StringCodecs.asciiOptimized();
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java index 1a83055..425d148 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.analysis.ServerDirectories; import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.build.lib.skyframe.serialization.testutils.FsUtils; +import com.google.devtools.build.lib.vfs.PathCodec; import org.junit.runner.RunWith; import org.junit.runners.JUnit4;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java index 7427e92..b2a2d49 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java
@@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.LabelCodec; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.runner.RunWith;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java index 55d3d11..a9c9ff7 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java
@@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.cmdline.PackageIdentifierCodec; import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.build.lib.vfs.PathFragment; import org.junit.runner.RunWith;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java index 38c2a42..4b37a3c 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java
@@ -17,6 +17,7 @@ import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.build.lib.skyframe.serialization.testutils.FsUtils; import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.PathCodec; import org.junit.runner.RunWith; import org.junit.runners.JUnit4;
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 index 8bf5276..52490c7 100644 --- 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
@@ -16,6 +16,7 @@ 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;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java index f1f08cd..692f602 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java
@@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.LabelCodec; import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.PrecomputedValueCodec; import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java index 3bbd29a..30f4e08 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.lib.cmdline.RepositoryNameCodec; import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import java.io.IOException; import org.junit.Test;