diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
119 files changed, 298 insertions, 277 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java index 16f926a2fc..b5d6c1ce62 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java @@ -340,7 +340,7 @@ public class ActionCacheChecker { } List<PathFragment> inputExecPaths = new ArrayList<>(); for (String path : entry.getPaths()) { - PathFragment execPath = new PathFragment(path); + PathFragment execPath = PathFragment.create(path); // Code assumes that action has only 1-2 outputs and ArrayList.contains() will be // most efficient. if (!outputs.contains(execPath)) { diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java index c63fd5b93a..c4567d8ce4 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java @@ -81,7 +81,7 @@ public final class ActionInputHelper { @Override public PathFragment getExecPath() { - return new PathFragment(path); + return PathFragment.create(path); } @Override @@ -170,7 +170,7 @@ public final class ActionInputHelper { * relative to that Artifact. */ public static TreeFileArtifact treeFileArtifact(Artifact parent, String relativePath) { - return treeFileArtifact(parent, new PathFragment(relativePath)); + return treeFileArtifact(parent, PathFragment.create(relativePath)); } /** Returns an Iterable of TreeFileArtifacts with the given parent and parent relative paths. */ diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java index a5b865f023..7c6a87087b 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java +++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java @@ -547,7 +547,7 @@ public class Artifact && relativePath.getSegment(0).equals(Label.EXTERNAL_PATH_PREFIX)) { // Turn external/repo/foo into ../repo/foo. relativePath = relativePath.relativeTo(Label.EXTERNAL_PATH_PREFIX); - relativePath = new PathFragment("..").getRelative(relativePath); + relativePath = PathFragment.create("..").getRelative(relativePath); } return relativePath; } diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java index 3f2f360259..ddeb001339 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java @@ -127,7 +127,7 @@ public class ArtifactFactory implements ArtifactResolver, ArtifactSerializer, Ar */ public ArtifactFactory(Path execRootParent, String derivedPathPrefix) { this.execRootParent = execRootParent; - this.derivedPathPrefix = new PathFragment(derivedPathPrefix); + this.derivedPathPrefix = PathFragment.create(derivedPathPrefix); } /** diff --git a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java index 404b0de10d..2a19d03a37 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java +++ b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java @@ -175,8 +175,8 @@ public final class MiddlemanFactory { PathFragment packageDirectory, String purpose, Iterable<Artifact> inputs, Root middlemanDir) { String escapedPackageDirectory = Actions.escapedPath(packageDirectory.getPathString()); PathFragment stampName = - new PathFragment("_middlemen/" + (purpose.startsWith(escapedPackageDirectory) - ? purpose : (escapedPackageDirectory + purpose))); + PathFragment.create("_middlemen/" + (purpose.startsWith(escapedPackageDirectory) + ? purpose : (escapedPackageDirectory + purpose))); Artifact stampFile = artifactFactory.getDerivedArtifact(stampName, middlemanDir, actionRegistry.getOwner()); MiddlemanAction.create( @@ -186,7 +186,7 @@ public final class MiddlemanFactory { private Artifact getStampFileArtifact(String middlemanName, String purpose, Root middlemanDir) { String escapedFilename = Actions.escapedPath(middlemanName); - PathFragment stampName = new PathFragment("_middlemen/" + escapedFilename + "-" + purpose); + PathFragment stampName = PathFragment.create("_middlemen/" + escapedFilename + "-" + purpose); Artifact stampFile = artifactFactory.getDerivedArtifact(stampName, middlemanDir, actionRegistry.getOwner()); return stampFile; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 7c18968f6b..036e7473b1 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -478,7 +478,7 @@ public class BuildView { String bzlFileLoadLikeString = aspect.substring(0, delimiterPosition); if (!bzlFileLoadLikeString.startsWith("//") && !bzlFileLoadLikeString.startsWith("@")) { // "Legacy" behavior of '--aspects' parameter. - bzlFileLoadLikeString = new PathFragment("/" + bzlFileLoadLikeString).toString(); + bzlFileLoadLikeString = PathFragment.create("/" + bzlFileLoadLikeString).toString(); if (bzlFileLoadLikeString.endsWith(".bzl")) { bzlFileLoadLikeString = bzlFileLoadLikeString.substring(0, bzlFileLoadLikeString.length() - ".bzl".length()); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java index e38c3d9cc8..ae8736cdc9 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java @@ -298,6 +298,6 @@ public final class CommandHelper { private PathFragment shellPath(Map<String, String> executionInfo) { // Use vanilla /bin/bash for actions running on mac machines. return executionInfo.containsKey(ExecutionRequirements.REQUIRES_DARWIN) - ? new PathFragment("/bin/bash") : ruleContext.getConfiguration().getShellExecutable(); + ? PathFragment.create("/bin/bash") : ruleContext.getConfiguration().getShellExecutable(); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index a54befb9e3..3ebdd78f76 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -554,7 +554,7 @@ public final class RuleContext extends TargetContext * thus guaranteeing that it never clashes with artifacts created by rules in other packages. */ public Artifact getPackageRelativeArtifact(String relative, Root root) { - return getPackageRelativeArtifact(new PathFragment(relative), root); + return getPackageRelativeArtifact(PathFragment.create(relative), root); } /** @@ -562,7 +562,7 @@ public final class RuleContext extends TargetContext * guaranteeing that it never clashes with artifacts created by rules in other packages. */ public Artifact getBinArtifact(String relative) { - return getBinArtifact(new PathFragment(relative)); + return getBinArtifact(PathFragment.create(relative)); } public Artifact getBinArtifact(PathFragment relative) { @@ -575,7 +575,7 @@ public final class RuleContext extends TargetContext * guaranteeing that it never clashes with artifacts created by rules in other packages. */ public Artifact getGenfilesArtifact(String relative) { - return getGenfilesArtifact(new PathFragment(relative)); + return getGenfilesArtifact(PathFragment.create(relative)); } public Artifact getGenfilesArtifact(PathFragment relative) { @@ -664,7 +664,7 @@ public final class RuleContext extends TargetContext */ public Artifact getUniqueDirectoryArtifact( String uniqueDirectory, String relative, Root root) { - return getUniqueDirectoryArtifact(uniqueDirectory, new PathFragment(relative), root); + return getUniqueDirectoryArtifact(uniqueDirectory, PathFragment.create(relative), root); } /** @@ -1235,7 +1235,7 @@ public final class RuleContext extends TargetContext * <p>For example "pkg/dir/name" -> "pkg/<fragment>/rule/dir/name. */ public final PathFragment getUniqueDirectory(String fragment) { - return AnalysisUtils.getUniqueDirectory(getLabel(), new PathFragment(fragment)); + return AnalysisUtils.getUniqueDirectory(getLabel(), PathFragment.create(fragment)); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java index 2ef4c2ca33..33c5d0aab2 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java @@ -785,7 +785,7 @@ public final class Runfiles { * created. */ public Builder(String workspace, boolean legacyExternalRunfiles) { - this(new PathFragment(workspace), legacyExternalRunfiles); + this(PathFragment.create(workspace), legacyExternalRunfiles); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java index 67dae4d2ba..26eeadc3ff 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java @@ -267,7 +267,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction { for (String line : FileSystemUtils.iterateLinesAsLatin1(archiveManifest.getPath())) { if (!line.isEmpty()) { - PathFragment path = new PathFragment(line); + PathFragment path = PathFragment.create(line); if (!path.isNormalized() || path.isAbsolute()) { throw new IllegalManifestFileException( diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index ce1316f56d..664429ed00 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java @@ -999,7 +999,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie * commands to be executed. */ public Builder setShellCommand(Iterable<String> command) { - this.executable = new PathFragment(Iterables.getFirst(command, null)); + this.executable = PathFragment.create(Iterables.getFirst(command, null)); // The first item of the commands is the shell executable that should be used. this.executableArgs = ImmutableList.copyOf(Iterables.skip(command, 1)); this.isShellCommand = true; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java index 73cc667034..2dd779f011 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java @@ -139,7 +139,7 @@ public final class BinTools { if (!embeddedTools.contains(embedPath)) { return null; } - return new PathFragment("_bin").getRelative(new PathFragment(embedPath).getBaseName()); + return PathFragment.create("_bin").getRelative(PathFragment.create(embedPath).getBaseName()); } public Artifact getEmbeddedArtifact(String embedPath, ArtifactFactory artifactFactory) { @@ -174,7 +174,7 @@ public final class BinTools { private void setupTool(String embeddedPath) throws ExecException { Path sourcePath = directories.getEmbeddedBinariesRoot().getRelative(embeddedPath); - Path linkPath = binDir.getRelative(new PathFragment(embeddedPath).getBaseName()); + Path linkPath = binDir.getRelative(PathFragment.create(embeddedPath).getBaseName()); linkTool(sourcePath, linkPath); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java index 2f21d85387..2dbc2282a0 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java @@ -300,9 +300,9 @@ public class BazelWorkspaceStatusModule extends BlazeModule { Root root = env.getDirectories().getBuildDataDirectory(workspaceName); Artifact stableArtifact = factory.getDerivedArtifact( - new PathFragment("stable-status.txt"), root, artifactOwner); + PathFragment.create("stable-status.txt"), root, artifactOwner); Artifact volatileArtifact = factory.getConstantMetadataArtifact( - new PathFragment("volatile-status.txt"), root, artifactOwner); + PathFragment.create("volatile-status.txt"), root, artifactOwner); return new BazelWorkspaceStatusAction(options, env.getClientEnv(), env.getDirectories().getWorkspace(), stableArtifact, volatileArtifact, getHostname()); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java index 55cd813d47..2e245b42f8 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/CompressedTarFunction.java @@ -59,7 +59,7 @@ public abstract class CompressedTarFunction implements Decompressor { FileSystemUtils.createDirectoryAndParents(filename); } else { if (entry.isSymbolicLink() || entry.isLink()) { - PathFragment linkName = new PathFragment(entry.getLinkName()); + PathFragment linkName = PathFragment.create(entry.getLinkName()); boolean wasAbsolute = linkName.isAbsolute(); // Strip the prefix from the link path if set. linkName = diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java index a25bc2cf89..76dc213e22 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java @@ -98,8 +98,8 @@ public class MavenServerFunction implements SkyFunction { if (!mapper.isAttributeValueExplicitlySpecified("settings_file")) { settingsFiles = getDefaultSettingsFile(directories, env); } else { - PathFragment settingsFilePath = new PathFragment( - mapper.get("settings_file", Type.STRING)); + PathFragment settingsFilePath = + PathFragment.create(mapper.get("settings_file", Type.STRING)); RootedPath settingsPath = RootedPath.toRootedPath( directories.getWorkspace().getRelative(settingsFilePath), PathFragment.EMPTY_FRAGMENT); @@ -183,7 +183,8 @@ public class MavenServerFunction implements SkyFunction { ImmutableList.Builder<SkyKey> settingsFilesBuilder = ImmutableList.builder(); SkyKey systemKey = null; if (m2Home != null) { - PathFragment mavenInstallSettings = new PathFragment(m2Home).getRelative("conf/settings.xml"); + PathFragment mavenInstallSettings = + PathFragment.create(m2Home).getRelative("conf/settings.xml"); systemKey = FileValue.key( RootedPath.toRootedPath(directories.getWorkspace().getRelative(mavenInstallSettings), PathFragment.EMPTY_FRAGMENT)); @@ -194,7 +195,7 @@ public class MavenServerFunction implements SkyFunction { String userHome = System.getenv("HOME"); SkyKey userKey = null; if (userHome != null) { - PathFragment userSettings = new PathFragment(userHome).getRelative(".m2/settings.xml"); + PathFragment userSettings = PathFragment.create(userHome).getRelative(".m2/settings.xml"); userKey = FileValue.key(RootedPath.toRootedPath( directories.getWorkspace().getRelative(userSettings), PathFragment.EMPTY_FRAGMENT)); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/StripPrefixedPath.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/StripPrefixedPath.java index 46650d6150..d26cd993bf 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/StripPrefixedPath.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/StripPrefixedPath.java @@ -64,9 +64,9 @@ public final class StripPrefixedPath { * Normalize the path and, if it is absolute, make it relative (e.g., /foo/bar becomes foo/bar). */ private static PathFragment relativize(String path) { - PathFragment entryPath = new PathFragment(path).normalize(); + PathFragment entryPath = PathFragment.create(path).normalize(); if (entryPath.isAbsolute()) { - entryPath = new PathFragment(entryPath.getSafePathString().substring( + entryPath = PathFragment.create(entryPath.getSafePathString().substring( entryPath.windowsVolume().length() + 1)); } return entryPath; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/ZipDecompressor.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/ZipDecompressor.java index d43a11772d..244e8597c9 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/ZipDecompressor.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/ZipDecompressor.java @@ -124,7 +124,7 @@ public class ZipDecompressor implements Decompressor { // For symlinks, the "compressed data" is actually the target name. int read = reader.getInputStream(entry).read(buffer); Preconditions.checkState(read == buffer.length); - PathFragment target = new PathFragment(new String(buffer, Charset.defaultCharset())) + PathFragment target = PathFragment.create(new String(buffer, Charset.defaultCharset())) .normalize(); if (!target.isNormalized()) { throw new IOException("Zip entries cannot refer to files outside of their directory: " diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpDownloader.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpDownloader.java index 0af26ec596..c35db986a5 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpDownloader.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpDownloader.java @@ -222,7 +222,7 @@ public class HttpDownloader { } String basename = MoreObjects.firstNonNull( - Strings.emptyToNull(new PathFragment(url.getPath()).getBaseName()), + Strings.emptyToNull(PathFragment.create(url.getPath()).getBaseName()), "temp"); if (!type.get().isEmpty()) { String suffix = "." + type.get(); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java index deff590162..7e382b2c0a 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java @@ -152,7 +152,7 @@ public class SkylarkRepositoryContext { private SkylarkPath getPath(String method, Object path) throws EvalException, InterruptedException { if (path instanceof String) { - PathFragment pathFragment = new PathFragment(path.toString()); + PathFragment pathFragment = PathFragment.create(path.toString()); return new SkylarkPath(pathFragment.isAbsolute() ? outputDirectory.getFileSystem().getPath(path.toString()) : outputDirectory.getRelative(pathFragment)); @@ -426,7 +426,7 @@ public class SkylarkRepositoryContext { "Program argument of which() may not contains a / or a \\ ('" + program + "' given)"); } for (String p : getPathEnvironment()) { - PathFragment fragment = new PathFragment(p); + PathFragment fragment = PathFragment.create(p); if (fragment.isAbsolute()) { // We ignore relative path as they don't mean much here (relative to where? the workspace // root?). diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java index 49656875e0..54eccb7065 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java @@ -61,20 +61,20 @@ public class BazelConfiguration extends Fragment { if (OS.getCurrent() == OS.WINDOWS) { String path = System.getenv("BAZEL_SH"); if (path != null) { - return new PathFragment(path); + return PathFragment.create(path); } else { - return new PathFragment("c:/tools/msys64/usr/bin/bash.exe"); + return PathFragment.create("c:/tools/msys64/usr/bin/bash.exe"); } } if (OS.getCurrent() == OS.FREEBSD) { String path = System.getenv("BAZEL_SH"); if (path != null) { - return new PathFragment(path); + return PathFragment.create(path); } else { - return new PathFragment("/usr/local/bin/bash"); + return PathFragment.create("/usr/local/bin/bash"); } } - return new PathFragment("/bin/bash"); + return PathFragment.create("/bin/bash"); } @Override @@ -101,10 +101,10 @@ public class BazelConfiguration extends Fragment { String newPath = ""; if (sh != null && sh.getParentDirectory() != null) { newPath = sh.getParentDirectory().getPathString(); - if (sh.getParentDirectory().endsWith(new PathFragment("usr/bin"))) { + if (sh.getParentDirectory().endsWith(PathFragment.create("usr/bin"))) { newPath += ";" + sh.getParentDirectory().getParentDirectory().replaceName("bin").getPathString(); - } else if (sh.getParentDirectory().endsWith(new PathFragment("bin"))) { + } else if (sh.getParentDirectory().endsWith(PathFragment.create("bin"))) { newPath += ";" + sh.getParentDirectory().replaceName("usr").getRelative("bin").getPathString(); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java index 6373eb66ce..acf6f788e9 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java @@ -61,7 +61,7 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction { private static final String TOOLCHAIN_NAME_PREFIX = "toolchain-"; private static final String PATH_ENV_VAR = "ANDROID_NDK_HOME"; - private static final PathFragment PLATFORMS_DIR = new PathFragment("platforms"); + private static final PathFragment PLATFORMS_DIR = PathFragment.create("platforms"); private static final Iterable<String> PATH_ENV_VAR_AS_LIST = ImmutableList.of(PATH_ENV_VAR); @@ -229,7 +229,7 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction { private static PathFragment getAndroidNdkHomeEnvironmentVar( Path workspace, Map<String, String> env) { - return workspace.getRelative(new PathFragment(env.get(PATH_ENV_VAR))).asFragment(); + return workspace.getRelative(PathFragment.create(env.get(PATH_ENV_VAR))).asFragment(); } private static String createBuildFile(String ruleName, List<CrosstoolStlPair> crosstools) { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java index 0c98f90ab5..14b05372df 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java @@ -56,9 +56,9 @@ import javax.annotation.Nullable; * Implementation of the {@code android_sdk_repository} rule. */ public class AndroidSdkRepositoryFunction extends RepositoryFunction { - private static final PathFragment BUILD_TOOLS_DIR = new PathFragment("build-tools"); - private static final PathFragment PLATFORMS_DIR = new PathFragment("platforms"); - private static final PathFragment SYSTEM_IMAGES_DIR = new PathFragment("system-images"); + private static final PathFragment BUILD_TOOLS_DIR = PathFragment.create("build-tools"); + private static final PathFragment PLATFORMS_DIR = PathFragment.create("platforms"); + private static final PathFragment SYSTEM_IMAGES_DIR = PathFragment.create("system-images"); private static final Revision MIN_BUILD_TOOLS_REVISION = new Revision(24, 0, 3); private static final String PATH_ENV_VAR = "ANDROID_HOME"; private static final ImmutableList<String> PATH_ENV_VAR_AS_LIST = ImmutableList.of(PATH_ENV_VAR); @@ -250,7 +250,7 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { private static PathFragment getAndroidHomeEnvironmentVar( Path workspace, Map<String, String> env) { - return workspace.getRelative(new PathFragment(env.get(PATH_ENV_VAR))).asFragment(); + return workspace.getRelative(PathFragment.create(env.get(PATH_ENV_VAR))).asFragment(); } private static String getStringResource(String name) { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index 5f398560d5..293091f6fa 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java @@ -226,7 +226,7 @@ public class BazelJavaSemantics implements JavaSemantics { if (!isRunfilesEnabled) { buffer.append("$(rlocation "); PathFragment runfilePath = - new PathFragment(new PathFragment(workspacePrefix), artifact.getRunfilesPath()); + PathFragment.create(PathFragment.create(workspacePrefix), artifact.getRunfilesPath()); buffer.append(runfilePath.normalize().getPathString()); buffer.append(")"); } else { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java index a913927f8f..e4b02626b4 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java @@ -55,7 +55,7 @@ public class BazelPythonSemantics implements PythonSemantics { FileTypeSet.of(BazelPyRuleClasses.PYTHON_SOURCE), "srcs", "deps", "data"); - public static final PathFragment ZIP_RUNFILES_DIRECTORY_NAME = new PathFragment("runfiles"); + public static final PathFragment ZIP_RUNFILES_DIRECTORY_NAME = PathFragment.create("runfiles"); @Override public void validate(RuleContext ruleContext, PyCommon common) { @@ -86,7 +86,7 @@ public class BazelPythonSemantics implements PythonSemantics { PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier().getRunfilesPath(); // Python scripts start with x.runfiles/ as the module space, so everything must be manually // adjusted to be relative to the workspace name. - packageFragment = new PathFragment(ruleContext.getWorkspaceName()) + packageFragment = PathFragment.create(ruleContext.getWorkspaceName()) .getRelative(packageFragment); for (String importsAttr : ruleContext.attributes().get("imports", Type.STRING_LIST)) { importsAttr = ruleContext.expandMakeVariables("includes", importsAttr); @@ -201,7 +201,7 @@ public class BazelPythonSemantics implements PythonSemantics { } private static boolean isUnderWorkspace(PathFragment path) { - return !path.startsWith(Label.EXTERNAL_PACKAGE_NAME); + return !path.startsWith(PathFragment.create(Label.EXTERNAL_PATH_PREFIX)); } private static String getZipRunfilesPath(PathFragment path, PathFragment workspaceName) { @@ -220,7 +220,7 @@ public class BazelPythonSemantics implements PythonSemantics { } private static String getZipRunfilesPath(String path, PathFragment workspaceName) { - return getZipRunfilesPath(new PathFragment(path), workspaceName); + return getZipRunfilesPath(PathFragment.create(path), workspaceName); } private static void createPythonZipAction( diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/OutputDirectoryLinksUtils.java b/src/main/java/com/google/devtools/build/lib/buildtool/OutputDirectoryLinksUtils.java index 0ae420a20c..40d8d0fb80 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/OutputDirectoryLinksUtils.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/OutputDirectoryLinksUtils.java @@ -132,7 +132,7 @@ public class OutputDirectoryLinksUtils { // Helper to getPrettyPath. Returns file, relativized w.r.t. the referent of // "linkname", or null if it was a not a child. private static PathFragment relativize(Path file, Path workspaceDirectory, String linkname) { - PathFragment link = new PathFragment(linkname); + PathFragment link = PathFragment.create(linkname); try { Path dir = workspaceDirectory.getRelative(link); PathFragment levelOneLinkTarget = dir.readSymbolicLink(); @@ -171,7 +171,7 @@ public class OutputDirectoryLinksUtils { removeLink(workspace, symlinkPrefix + "bin", failures); removeLink(workspace, symlinkPrefix + "testlogs", failures); removeLink(workspace, symlinkPrefix + "genfiles", failures); - FileSystemUtils.removeDirectoryAndParents(workspace, new PathFragment(symlinkPrefix)); + FileSystemUtils.removeDirectoryAndParents(workspace, PathFragment.create(symlinkPrefix)); if (!failures.isEmpty()) { eventHandler.handle(Event.warn(String.format( "failed to remove one or more convenience symlinks for prefix '%s':\n %s", symlinkPrefix, diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java index 1d31f2edc2..4bc5a4caae 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java @@ -51,8 +51,8 @@ import javax.annotation.Nullable; @Immutable @ThreadSafe public final class Label implements Comparable<Label>, Serializable, SkylarkPrintableValue { - public static final PathFragment EXTERNAL_PACKAGE_NAME = new PathFragment("external"); - public static final PathFragment EXTERNAL_PACKAGE_FILE_NAME = new PathFragment("WORKSPACE"); + public static final PathFragment EXTERNAL_PACKAGE_NAME = PathFragment.create("external"); + public static final PathFragment EXTERNAL_PACKAGE_FILE_NAME = PathFragment.create("WORKSPACE"); public static final String DEFAULT_REPOSITORY_DIRECTORY = "__main__"; /** @@ -61,11 +61,11 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin */ public static final ImmutableSet<PathFragment> ABSOLUTE_PACKAGE_NAMES = ImmutableSet.of( // Used for select - new PathFragment("conditions"), + PathFragment.create("conditions"), // dependencies that are a function of the configuration - new PathFragment("tools/defaults"), + PathFragment.create("tools/defaults"), // Visibility is labels aren't actually targets - new PathFragment("visibility"), + PathFragment.create("visibility"), // There is only one //external package Label.EXTERNAL_PACKAGE_NAME); diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java index 5688a3184f..3c82f6c2f6 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java @@ -49,7 +49,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S PathFragment.EMPTY_FRAGMENT); public static PackageIdentifier createInMainRepo(String name) { - return createInMainRepo(new PathFragment(name)); + return createInMainRepo(PathFragment.create(name)); } public static PackageIdentifier createInMainRepo(PathFragment name) { @@ -79,7 +79,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S ? Preconditions.checkNotNull( execPath.getParentDirectory(), "Must pass in files, not root directory") : execPath; - if (tofind.startsWith(new PathFragment(Label.EXTERNAL_PATH_PREFIX))) { + if (tofind.startsWith(PathFragment.create(Label.EXTERNAL_PATH_PREFIX))) { // TODO(ulfjack): Remove this when kchodorow@'s exec root rearrangement has been rolled out. RepositoryName repository = RepositoryName.create("@" + tofind.getSegment(1)); return PackageIdentifier.create(repository, tofind.subFragment(2, tofind.segmentCount())); @@ -137,7 +137,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S throw new LabelSyntaxException(error); } - return create(repo, new PathFragment(packageName)); + return create(repo, PathFragment.create(packageName)); } public RepositoryName getRepository() { diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java index ae1fe70270..b9564e79c5 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java @@ -232,7 +232,7 @@ public final class RepositoryName implements Serializable { public PathFragment getPathUnderExecRoot() { return isDefault() || isMain() ? PathFragment.EMPTY_FRAGMENT - : new PathFragment(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName()); + : PathFragment.create(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName()); } /** @@ -241,7 +241,7 @@ public final class RepositoryName implements Serializable { // TODO(kchodorow): remove once execroot is reorg-ed. public PathFragment getRunfilesPath() { return isDefault() || isMain() - ? PathFragment.EMPTY_FRAGMENT : new PathFragment("..").getRelative(strippedName()); + ? PathFragment.EMPTY_FRAGMENT : PathFragment.create("..").getRelative(strippedName()); } /** diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java index f599ef3519..be3bcaa55f 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java @@ -779,7 +779,7 @@ public abstract class TargetPattern implements Serializable { try { PackageAndTarget packageAndTarget = LabelValidator.validateAbsoluteLabel(fullLabel); packageIdentifier = PackageIdentifier.create(repository, - new PathFragment(packageAndTarget.getPackageName())); + PathFragment.create(packageAndTarget.getPackageName())); } catch (BadLabelException e) { String error = "invalid target format '" + originalPattern + "': " + e.getMessage(); throw new TargetParsingException(error); diff --git a/src/main/java/com/google/devtools/build/lib/exec/SingleBuildFileCache.java b/src/main/java/com/google/devtools/build/lib/exec/SingleBuildFileCache.java index 4099a8ad54..ec93068c1d 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/SingleBuildFileCache.java +++ b/src/main/java/com/google/devtools/build/lib/exec/SingleBuildFileCache.java @@ -130,7 +130,7 @@ public class SingleBuildFileCache implements ActionInputFileCache { */ private String fullPath(ActionInput input) { String relPath = input.getExecPathString(); - return new PathFragment(relPath).isAbsolute() ? relPath : new File(cwd, relPath).getPath(); + return PathFragment.create(relPath).isAbsolute() ? relPath : new File(cwd, relPath).getPath(); } /** Container class for caching I/O around ActionInputs. */ diff --git a/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java b/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java index f32d238243..351f8c7e10 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java +++ b/src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java @@ -147,7 +147,7 @@ public class SpawnInputExpander { PathFragment location; int pos = line.indexOf(' '); if (pos == -1) { - location = new PathFragment(line); + location = PathFragment.create(line); artifact = EMPTY_FILE; } else { String targetPath = line.substring(pos + 1); @@ -156,7 +156,7 @@ public class SpawnInputExpander { } artifact = targetPath.isEmpty() ? EMPTY_FILE : ActionInputHelper.fromPath(targetPath); - location = new PathFragment(line.substring(0, pos)); + location = PathFragment.create(line.substring(0, pos)); if (!workspaceName.isEmpty()) { if (!location.getSegment(0).equals(workspaceName)) { throw new IOException( diff --git a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java index 9a99031dd8..0a29b9f89d 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/exec/TestStrategy.java @@ -127,7 +127,7 @@ public abstract class TestStrategy implements TestActionContext { } } - public static final PathFragment TEST_TMP_ROOT = new PathFragment("_tmp"); + public static final PathFragment TEST_TMP_ROOT = PathFragment.create("_tmp"); // Used for generating unique temporary directory names. Contains the next numeric index for every // executable base name. diff --git a/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java b/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java index e55a4ed307..d52db41ad3 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java +++ b/src/main/java/com/google/devtools/build/lib/packages/FilesetEntry.java @@ -140,7 +140,7 @@ public final class FilesetEntry implements SkylarkValue { this.srcLabel = Preconditions.checkNotNull(srcLabel); this.files = files == null ? null : ImmutableList.copyOf(files); this.excludes = (excludes == null || excludes.isEmpty()) ? null : ImmutableSet.copyOf(excludes); - this.destDir = new PathFragment((destDir == null) ? "" : destDir); + this.destDir = PathFragment.create((destDir == null) ? "" : destDir); this.symlinkBehavior = symlinkBehavior == null ? DEFAULT_SYMLINK_BEHAVIOR : symlinkBehavior; this.stripPrefix = stripPrefix == null ? DEFAULT_STRIP_PREFIX : stripPrefix; } @@ -225,7 +225,7 @@ public final class FilesetEntry implements SkylarkValue { } else if (stripPrefix.startsWith("/")) { return "Cannot specify absolute strip prefix; perhaps you need to use \"" + STRIP_PREFIX_WORKSPACE + "\""; - } else if (new PathFragment(stripPrefix).containsUplevelReferences()) { + } else if (PathFragment.create(stripPrefix).containsUplevelReferences()) { return "Strip prefix must not contain uplevel references"; } else if (stripPrefix.startsWith("%") && !stripPrefix.startsWith(STRIP_PREFIX_WORKSPACE)) { return "If the strip_prefix starts with \"%\" then it must start with \"" diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java index 9de8f76d71..8d7ed337ad 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java @@ -301,10 +301,10 @@ public abstract class ImplicitOutputsFunction { if (attrName.equals("name")) { return singleton(rule.getName()); } else if (attrName.equals("dirname")) { - PathFragment dir = new PathFragment(rule.getName()).getParentDirectory(); + PathFragment dir = PathFragment.create(rule.getName()).getParentDirectory(); return (dir.segmentCount() == 0) ? singleton("") : singleton(dir.getPathString() + "/"); } else if (attrName.equals("basename")) { - return singleton(new PathFragment(rule.getName()).getBaseName()); + return singleton(PathFragment.create(rule.getName()).getBaseName()); } Type<?> attrType = rule.getAttributeType(attrName); diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java index e4f726104f..1556dcb141 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Package.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java @@ -526,7 +526,7 @@ public class Package { // stat(2) is executed. Path filename = getPackageDirectory().getRelative(targetName); String suffix; - if (!new PathFragment(targetName).isNormalized()) { + if (!PathFragment.create(targetName).isNormalized()) { // Don't check for file existence in this case because the error message // would be confusing and wrong. If the targetName is "foo/bar/.", and // there is a directory "foo/bar", it doesn't mean that "//pkg:foo/bar/." @@ -1242,7 +1242,7 @@ public class Package { // Now, modify the package: for (OutputFile outputFile : rule.getOutputFiles()) { targets.put(outputFile.getName(), outputFile); - PathFragment outputFileFragment = new PathFragment(outputFile.getName()); + PathFragment outputFileFragment = PathFragment.create(outputFile.getName()); for (int i = 1; i < outputFileFragment.segmentCount(); i++) { String prefix = outputFileFragment.subFragment(0, i).toString(); if (!outputFilePrefixes.containsKey(prefix)) { @@ -1430,7 +1430,7 @@ public class Package { } // Check if a prefix of this output file matches an already existing one - PathFragment outputFileFragment = new PathFragment(outputFileName); + PathFragment outputFileFragment = PathFragment.create(outputFileName); for (int i = 1; i < outputFileFragment.segmentCount(); i++) { String prefix = outputFileFragment.subFragment(0, i).toString(); if (outputFiles.containsKey(prefix)) { diff --git a/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java b/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java index 144dc8903f..b9be5a0713 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java @@ -65,7 +65,7 @@ public class RelativePackageNameResolver { relativePkg = pkg; } - PathFragment relative = new PathFragment(relativePkg); + PathFragment relative = PathFragment.create(relativePkg); if (discardBuild && relative.getBaseName().equals("BUILD")) { relative = relative.getParentDirectory(); diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java index 37bc246916..1324cce3a2 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java +++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java @@ -107,7 +107,7 @@ public class RuleClass { static final Function<? super Rule, Map<String, Label>> NO_EXTERNAL_BINDINGS = Functions.<Map<String, Label>>constant(ImmutableMap.<String, Label>of()); - public static final PathFragment THIRD_PARTY_PREFIX = new PathFragment("third_party"); + public static final PathFragment THIRD_PARTY_PREFIX = PathFragment.create("third_party"); /** * A constraint for the package name of the Rule instances. diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java index 3ccbc1db99..30609168f3 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java @@ -163,7 +163,7 @@ public class PathPackageLocator implements Serializable { // Replace "%workspace%" with the path of the enclosing workspace directory. pathElement = pathElement.replace(workspaceWildcard, workspace.getPathString()); - PathFragment pathElementFragment = new PathFragment(pathElement); + PathFragment pathElementFragment = PathFragment.create(pathElement); // If the path string started with "%workspace%" or "/", it is already absolute, // so the following line is a no-op. @@ -218,7 +218,7 @@ public class PathPackageLocator implements Serializable { AtomicReference<? extends UnixGlob.FilesystemCalls> cache = UnixGlob.DEFAULT_SYSCALLS_REF; // TODO(bazel-team): correctness in the presence of changes to the location of the WORKSPACE // file. - return getFilePath(new PathFragment("WORKSPACE"), cache); + return getFilePath(PathFragment.create("WORKSPACE"), cache); } private Path getFilePath(PathFragment suffix, diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java index d8534caf52..d12b3ac5b5 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java @@ -69,7 +69,7 @@ public final class TargetPatternResolverUtil { } public static PathFragment getPathFragment(String pathPrefix) throws TargetParsingException { - PathFragment directory = new PathFragment(pathPrefix); + PathFragment directory = PathFragment.create(pathPrefix); if (directory.containsUplevelReferences()) { throw new TargetParsingException("up-level references are not permitted: '" + directory.getPathString() + "'"); diff --git a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java index e2fb0e4dfd..23a9560b15 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java +++ b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java @@ -61,7 +61,7 @@ public class RBuildFilesFunction implements QueryFunction { new Function<Argument, PathFragment>() { @Override public PathFragment apply(Argument argument) { - return new PathFragment(argument.getWord()); + return PathFragment.create(argument.getWord()); } }; diff --git a/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java b/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java index 89c61c26e3..0850fec75a 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java +++ b/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java @@ -227,7 +227,7 @@ public final class TreeNodeRepository extends TreeTraverser<TreeNodeRepository.T public TreeNode buildFromActionInputs(Iterable<? extends ActionInput> inputs) { TreeMap<PathFragment, ActionInput> sortedMap = new TreeMap<>(); for (ActionInput input : inputs) { - sortedMap.put(new PathFragment(input.getExecPathString()), input); + sortedMap.put(PathFragment.create(input.getExecPathString()), input); } return buildFromActionInputs(sortedMap); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java index 445716a7ff..435217403e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java @@ -914,7 +914,7 @@ public final class SkylarkRuleContext implements SkylarkValue { public Artifact newDirectory(String name, Object siblingArtifactUnchecked) throws EvalException { checkMutable("experimental_new_directory"); if (siblingArtifactUnchecked == Runtime.NONE) { - return ruleContext.getPackageRelativeTreeArtifact(new PathFragment(name), newFileRoot()); + return ruleContext.getPackageRelativeTreeArtifact(PathFragment.create(name), newFileRoot()); } Artifact siblingArtifact = (Artifact) siblingArtifactUnchecked; PathFragment original = siblingArtifact.getRootRelativePath(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java index cd6182a7f9..9f5500f062 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java @@ -636,14 +636,14 @@ public class SkylarkRuleImplementationFunctions { checkConflicts = true; for (Map.Entry<String, Artifact> entry : symlinks.getContents( String.class, Artifact.class, "symlinks").entrySet()) { - builder.addSymlink(new PathFragment(entry.getKey()), entry.getValue()); + builder.addSymlink(PathFragment.create(entry.getKey()), entry.getValue()); } } if (!rootSymlinks.isEmpty()) { checkConflicts = true; for (Map.Entry<String, Artifact> entry : rootSymlinks.getContents( String.class, Artifact.class, "root_symlinks").entrySet()) { - builder.addRootSymlink(new PathFragment(entry.getKey()), entry.getValue()); + builder.addRootSymlink(PathFragment.create(entry.getKey()), entry.getValue()); } } Runfiles runfiles = builder.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java index 55253a0296..d3e325827a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java @@ -90,7 +90,7 @@ public final class AndroidAaptActionHelper { public void createGenerateResourceSymbolsAction(Artifact javaSourcesJar, Artifact rTxt, String javaPackage, boolean inlineConstants) { // java path from the provided package for the resources - PathFragment javaPath = new PathFragment(javaPackage.replace('.', '/')); + PathFragment javaPath = PathFragment.create(javaPackage.replace('.', '/')); PathFragment javaResourcesRoot = javaSourcesJar.getRoot().getExecPath().getRelative( ruleContext.getUniqueDirectory("_java_resources")); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index c917b5dd06..91a43c0171 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -772,7 +772,7 @@ public class AndroidCommon { } public static PathFragment getAssetDir(RuleContext ruleContext) { - return new PathFragment(ruleContext.attributes().get( + return PathFragment.create(ruleContext.attributes().get( ResourceType.ASSETS.getAttribute() + "_dir", Type.STRING)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java index 1f8b0b64b3..7326e171a6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java @@ -256,7 +256,7 @@ public class AndroidIdlHelper { // Reconstruct the package tree under <rule>_aidl to avoid a name conflict // if the same AIDL files are used in multiple targets. PathFragment javaOutputPath = FileSystemUtils.replaceExtension( - new PathFragment(ruleName + "_aidl").getRelative(idl.getRootRelativePath()), + PathFragment.create(ruleName + "_aidl").getRelative(idl.getRootRelativePath()), ".java"); Artifact output = ruleContext.getGenfilesArtifact(javaOutputPath.getPathString()); outputJavaSources.put(idl, output); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java index d690366140..1821c4b4b4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java @@ -154,7 +154,7 @@ public final class ApplicationManifest { */ public static ApplicationManifest generatedManifest(RuleContext ruleContext) { Artifact generatedManifest = ruleContext.getUniqueDirectoryArtifact( - ruleContext.getRule().getName() + "_generated", new PathFragment("AndroidManifest.xml"), + ruleContext.getRule().getName() + "_generated", PathFragment.create("AndroidManifest.xml"), ruleContext.getBinOrGenfilesDirectory()); String manifestPackage = AndroidCommon.getJavaPackage(ruleContext); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java index b5a8c5f6c6..48783e68a7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java @@ -139,7 +139,7 @@ public final class NativeLibs { for (Map.Entry<String, Iterable<Artifact>> entry : nativeLibs.entrySet()) { String arch = entry.getKey(); for (Artifact lib : entry.getValue()) { - symlinks.put(new PathFragment(arch + "/" + lib.getExecPath().getBaseName()), lib); + symlinks.put(PathFragment.create(arch + "/" + lib.getExecPath().getBaseName()), lib); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java index 950c800dd2..9b9ae3118f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java @@ -220,9 +220,9 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { // linkopt "-shared", which causes the result of linking to be a shared // library. In this case, the name of the executable target should end // in ".so" or "dylib" or ".dll". - PathFragment binaryPath = new PathFragment(ruleContext.getTarget().getName()); + PathFragment binaryPath = PathFragment.create(ruleContext.getTarget().getName()); if (!isLinkShared(ruleContext)) { - binaryPath = new PathFragment(binaryPath.getPathString() + OsUtils.executableExtension()); + binaryPath = PathFragment.create(binaryPath.getPathString() + OsUtils.executableExtension()); } Artifact binary = ruleContext.getBinArtifact(binaryPath); @@ -676,7 +676,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { PathFragment intermediatePath = FileSystemUtils.appendWithoutExtension(outputPath, "-" + orderNumber); return ruleContext.getPackageRelativeArtifact( - new PathFragment(INTERMEDIATE_DWP_DIR + "/" + intermediatePath.getPathString()), + PathFragment.create(INTERMEDIATE_DWP_DIR + "/" + intermediatePath.getPathString()), dwpOutput.getRoot()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java index e2288523a7..e3b9b85354 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcIncLibrary.java @@ -81,7 +81,7 @@ public abstract class CcIncLibrary implements RuleConfiguredTargetFactory { // versions. Previous Blaze versions created a directory symlink; the new version does not // detect that the output directory isn't a directory, and tries to put the symlinks into what // is actually a symlink into the source tree. - PathFragment includeDirectory = new PathFragment("_") + PathFragment includeDirectory = PathFragment.create("_") .getRelative(ruleContext.getTarget().getName()); Root configIncludeDirectory = ruleContext.getConfiguration().getIncludeDirectory(ruleContext.getRule().getRepository()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index e2c04b7608..3d727aefa1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java @@ -156,7 +156,7 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { if (outs.size() > 1) { ruleContext.attributeError("outs", "must be a singleton list"); } else if (outs.size() == 1) { - PathFragment soImplFilename = new PathFragment(ruleContext.getLabel().getName()); + PathFragment soImplFilename = PathFragment.create(ruleContext.getLabel().getName()); soImplFilename = soImplFilename.replaceName(outs.get(0)); if (!soImplFilename.getPathString().endsWith(".so")) { // Sanity check. ruleContext.attributeError("outs", "file name must end in '.so'"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index 248bcfd23f..83eb0ff321 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -1197,13 +1197,13 @@ public final class CcLibraryHelper { PathFragment prefix = ruleContext.attributes().isAttributeValueExplicitlySpecified("include_prefix") - ? new PathFragment(ruleContext.attributes().get("include_prefix", Type.STRING)) + ? PathFragment.create(ruleContext.attributes().get("include_prefix", Type.STRING)) : null; PathFragment stripPrefix; if (ruleContext.attributes().isAttributeValueExplicitlySpecified("strip_include_prefix")) { - stripPrefix = new PathFragment( - ruleContext.attributes().get("strip_include_prefix", Type.STRING)); + stripPrefix = + PathFragment.create(ruleContext.attributes().get("strip_include_prefix", Type.STRING)); if (stripPrefix.isAbsolute()) { stripPrefix = ruleContext.getLabel().getPackageIdentifier().getRepository().getSourceRoot() .getRelative(stripPrefix.toRelative()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java index 73060ef00f..9cb154f3db 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java @@ -61,7 +61,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory { * This file (found under the sysroot) may be unconditionally included in every C/C++ compilation. */ private static final PathFragment BUILTIN_INCLUDE_FILE_SUFFIX = - new PathFragment("include/stdc-predef.h"); + PathFragment.create("include/stdc-predef.h"); @Override public ConfiguredTarget create(RuleContext ruleContext) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java index b5b1183547..d63b01d785 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java @@ -2072,7 +2072,7 @@ public class CcToolchainFeatures implements Serializable { */ String getArtifactNameForCategory(ArtifactCategory artifactCategory, String outputName) throws ExpansionException { - PathFragment output = new PathFragment(outputName); + PathFragment output = PathFragment.create(outputName); ArtifactNamePattern patternForCategory = null; for (ArtifactNamePattern artifactNamePattern : artifactNamePatterns) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java index 30a5515b3e..8e49f99c75 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppBuildInfo.java @@ -34,13 +34,13 @@ public final class CppBuildInfo implements BuildInfoFactory { public static final BuildInfoKey KEY = new BuildInfoKey("C++"); private static final PathFragment BUILD_INFO_NONVOLATILE_HEADER_NAME = - new PathFragment("build-info-nonvolatile.h"); + PathFragment.create("build-info-nonvolatile.h"); private static final PathFragment BUILD_INFO_VOLATILE_HEADER_NAME = - new PathFragment("build-info-volatile.h"); + PathFragment.create("build-info-volatile.h"); // TODO(bazel-team): (2011) Get rid of the redacted build info. We should try to make // the linkstamping process handle the case where those values are undefined. private static final PathFragment BUILD_INFO_REDACTED_HEADER_NAME = - new PathFragment("build-info-redacted.h"); + PathFragment.create("build-info-redacted.h"); @Override public BuildInfoCollection create(BuildInfoContext buildInfoContext, BuildConfiguration config, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index 84b3c85a93..741ca596c8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -614,7 +614,7 @@ public class CppCompileAction extends AbstractAction for (String opt : cppCompileCommandLine.copts) { if (opt.startsWith("-I") && opt.length() > 2) { // We insist on the combined form "-Idir". - result.add(new PathFragment(opt.substring(2))); + result.add(PathFragment.create(opt.substring(2))); } } return result.build(); @@ -634,10 +634,10 @@ public class CppCompileAction extends AbstractAction String opt = compilerOptions.get(i); if (opt.startsWith("-isystem")) { if (opt.length() > 8) { - result.add(new PathFragment(opt.substring(8).trim())); + result.add(PathFragment.create(opt.substring(8).trim())); } else if (i + 1 < compilerOptions.size()) { i++; - result.add(new PathFragment(compilerOptions.get(i))); + result.add(PathFragment.create(compilerOptions.get(i))); } else { System.err.println("WARNING: dangling -isystem flag in options for " + prettyPrint()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java index 2646692bfe..2b7669f17b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java @@ -474,7 +474,7 @@ public class CppCompileActionBuilder { continue; } // One starting ../ is okay for getting to a sibling repository. - if (include.startsWith(new PathFragment(Label.EXTERNAL_PATH_PREFIX))) { + if (include.startsWith(PathFragment.create(Label.EXTERNAL_PATH_PREFIX))) { include = include.relativeTo(Label.EXTERNAL_PATH_PREFIX); } if (include.isAbsolute() diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java index 8b80179a44..ea0697cd67 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java @@ -79,7 +79,7 @@ public final class CppCompileActionTemplate implements ActionTemplate<CppCompile String outputName = outputTreeFileArtifactName(inputTreeFileArtifact); TreeFileArtifact outputTreeFileArtifact = ActionInputHelper.treeFileArtifact( outputTreeArtifact, - new PathFragment(outputName), + PathFragment.create(outputName), artifactOwner); expandedActions.add(createAction(inputTreeFileArtifact, outputTreeFileArtifact)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index f658f6732e..843a72c932 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java @@ -190,7 +190,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment { PathFragment defaultSysroot = toolchain.getBuiltinSysroot().length() == 0 ? null - : new PathFragment(toolchain.getBuiltinSysroot()); + : PathFragment.create(toolchain.getBuiltinSysroot()); if ((defaultSysroot != null) && !defaultSysroot.isNormalized()) { throw new InvalidConfigurationException( "The built-in sysroot '" + defaultSysroot + "' is not normalized."); @@ -502,7 +502,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment { this.toolPaths = Maps.newHashMap(); for (CrosstoolConfig.ToolPath tool : toolchain.getToolPathList()) { - PathFragment path = new PathFragment(tool.getPath()); + PathFragment path = PathFragment.create(tool.getPath()); if (!path.isNormalized()) { throw new IllegalArgumentException("The include path '" + tool.getPath() + "' is not normalized."); @@ -604,7 +604,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment { // The default value for optional string attributes is the empty string. PathFragment defaultSysroot = toolchain.getBuiltinSysroot().length() == 0 ? null - : new PathFragment(toolchain.getBuiltinSysroot()); + : PathFragment.create(toolchain.getBuiltinSysroot()); if ((defaultSysroot != null) && !defaultSysroot.isNormalized()) { throw new IllegalArgumentException("The built-in sysroot '" + defaultSysroot + "' is not normalized."); @@ -791,7 +791,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment { gccToolPath = tool.getPath(); linkerToolPath = crosstoolTopPathFragment - .getRelative(new PathFragment(tool.getPath())) + .getRelative(PathFragment.create(tool.getPath())) .getPathString(); } } @@ -1181,7 +1181,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment { } } - PathFragment path = new PathFragment(pathString); + PathFragment path = PathFragment.create(pathString); if (!path.isNormalized()) { throw new InvalidConfigurationException("The include path '" + s + "' is not normalized."); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index a94d10ea6d..41afb816ff 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -283,7 +283,7 @@ public class CppHelper { * Returns the directory where object files are created. */ public static PathFragment getObjDirectory(Label ruleLabel) { - return AnalysisUtils.getUniqueDirectory(ruleLabel, new PathFragment("_objs")); + return AnalysisUtils.getUniqueDirectory(ruleLabel, PathFragment.create("_objs")); } /** @@ -360,7 +360,7 @@ public class CppHelper { BuildConfiguration config, LinkTargetType linkType, String linkedArtifactNameSuffix) { - PathFragment name = new PathFragment(ruleContext.getLabel().getName()); + PathFragment name = PathFragment.create(ruleContext.getLabel().getName()); if (linkType != LinkTargetType.EXECUTABLE) { name = name.replaceName( "lib" + name.getBaseName() + linkedArtifactNameSuffix + linkType.getExtension()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java index bca504c0cf..1acc9b4909 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java @@ -919,7 +919,7 @@ public final class CppModel { builder .setPicMode(usePic) .setOutputs(ruleContext, outputCategory, outputNameBase, generateDotd) - .setTempOutputFile(new PathFragment(tempOutputName)); + .setTempOutputFile(PathFragment.create(tempOutputName)); setupCompileBuildVariables( builder, @@ -969,7 +969,7 @@ public final class CppModel { } String linkedName = CppHelper.getArtifactNameForCategory( ruleContext, ccToolchain, linkTargetType.getLinkerOutput(), maybePicName); - PathFragment artifactFragment = new PathFragment(ruleContext.getLabel().getName()) + PathFragment artifactFragment = PathFragment.create(ruleContext.getLabel().getName()) .getParentDirectory().getRelative(linkedName); result = ruleContext.getPackageRelativeArtifact( @@ -1042,7 +1042,7 @@ public final class CppModel { // If the crosstool is configured to select an output artifact, we use that selection. // Otherwise, we use linux defaults. Artifact linkedArtifact = getLinkedArtifact(linkType); - PathFragment labelName = new PathFragment(ruleContext.getLabel().getName()); + PathFragment labelName = PathFragment.create(ruleContext.getLabel().getName()); String libraryIdentifier = ruleContext.getPackageDirectory().getRelative( labelName.replaceName("lib" + labelName.getBaseName())).getPathString(); CppLinkAction maybePicAction = diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java index 77e653c4d9..9930e35dd9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java @@ -127,7 +127,7 @@ public class FdoSupport { * Path within profile data .zip files that is considered the root of the * profile information directory tree. */ - private static final PathFragment ZIP_ROOT = new PathFragment("/"); + private static final PathFragment ZIP_ROOT = PathFragment.create("/"); /** * Returns true if the given fdoFile represents an AutoFdo profile. @@ -220,7 +220,7 @@ public class FdoSupport { this.fdoRootExecPath = fdoRootExecPath; this.fdoPath = fdoProfile == null ? null - : FileSystemUtils.removeExtension(new PathFragment("_fdo").getChild( + : FileSystemUtils.removeExtension(PathFragment.create("_fdo").getChild( fdoProfile.getBaseName())); this.lipoMode = lipoMode; this.fdoMode = fdoMode; @@ -264,7 +264,7 @@ public class FdoSupport { PathFragment fdoRootExecPath = fdoProfile == null ? null : fdoRoot.getExecPath().getRelative(FileSystemUtils.removeExtension( - new PathFragment("_fdo").getChild(fdoProfile.getBaseName()))); + PathFragment.create("_fdo").getChild(fdoProfile.getBaseName()))); if (fdoProfile != null) { if (lipoMode != LipoMode.OFF) { @@ -413,12 +413,12 @@ public class FdoSupport { if (!line.isEmpty()) { // We can't yet fully check the validity of a line. this is done later // when we actually parse the contained paths. - PathFragment execPath = new PathFragment(line); + PathFragment execPath = PathFragment.create(line); if (execPath.isAbsolute()) { throw new FdoException("Absolute paths not allowed in gcda imports file " + importsFile + ": " + execPath); } - importsBuilder.put(key, new PathFragment(line)); + importsBuilder.put(key, PathFragment.create(line)); } } } @@ -440,7 +440,7 @@ public class FdoSupport { if (colonIndex < 0) { continue; } - PathFragment key = new PathFragment(line.substring(0, colonIndex)); + PathFragment key = PathFragment.create(line.substring(0, colonIndex)); if (key.isAbsolute()) { throw new FdoException("Absolute paths not allowed in afdo imports file " + importsFile + ": " + key); @@ -450,7 +450,7 @@ public class FdoSupport { continue; } - importBuilder.put(key, new PathFragment(auxFile)); + importBuilder.put(key, PathFragment.create(auxFile)); } } return importBuilder.build(); @@ -665,7 +665,7 @@ public class FdoSupport { } private static PathFragment getAutoProfileRootRelativePath(Path fdoProfile) { - return new PathFragment(fdoProfile.getBaseName()); + return PathFragment.create(fdoProfile.getBaseName()); } @@ -674,7 +674,7 @@ public class FdoSupport { } private static PathFragment getLLVMProfileRootRelativePath(Path fdoProfile) { - return new PathFragment(fdoProfile.getBaseName()); + return PathFragment.create(fdoProfile.getBaseName()); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java index 9af100ffd8..4fa0a82a10 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java @@ -117,14 +117,14 @@ public final class LTOBackendAction extends SpawnAction { try { for (String line : FileSystemUtils.iterateLinesAsLatin1(imports.getPath())) { if (!line.isEmpty()) { - PathFragment execPath = new PathFragment(line); + PathFragment execPath = PathFragment.create(line); if (execPath.isAbsolute()) { throw new ActionExecutionException( "Absolute paths not allowed in imports file " + imports.getPath() + ": " + execPath, this, false); } - importSet.add(new PathFragment(line)); + importSet.add(PathFragment.create(line)); } } } catch (IOException e) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java index c2bca35809..e524b1e12c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java @@ -139,7 +139,7 @@ public final class SolibSymlinkAction extends AbstractAction { */ public static Artifact getCppRuntimeSymlink(RuleContext ruleContext, Artifact library, String solibDirOverride, BuildConfiguration configuration) { - PathFragment solibDir = new PathFragment(solibDirOverride != null + PathFragment solibDir = PathFragment.create(solibDirOverride != null ? solibDirOverride : configuration.getFragment(CppConfiguration.class).getSolibDirectory()); PathFragment symlinkName = solibDir.getRelative(library.getRootRelativePath().getBaseName()); @@ -181,7 +181,7 @@ public final class SolibSymlinkAction extends AbstractAction { String escapedRulePath = Actions.escapedPath( "_" + ruleContext.getLabel()); String soname = getDynamicLibrarySoname(libraryPath, preserveName); - PathFragment solibDir = new PathFragment(cppConfiguration.getSolibDirectory()); + PathFragment solibDir = PathFragment.create(cppConfiguration.getSolibDirectory()); if (preserveName) { String escapedLibraryPath = Actions.escapedPath("_" + libraryPath.getParentDirectory().getPathString()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java index db3569a370..90de182573 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java +++ b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java @@ -204,7 +204,7 @@ public final class ExtraActionSpec implements TransitiveInfoProvider { private Artifact getRootRelativePath(String template, RuleContext ruleContext) { PathFragment extraActionPackageFragment = label.getPackageIdentifier().getSourceRoot(); PathFragment extraActionPrefix = extraActionPackageFragment.getRelative(label.getName()); - PathFragment rootRelativePath = new PathFragment("extra_actions") + PathFragment rootRelativePath = PathFragment.create("extra_actions") .getRelative(extraActionPrefix) .getRelative(ruleContext.getPackageDirectory()) .getRelative(template); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index e6bc5587d7..60aa02855c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -58,7 +58,7 @@ import javax.annotation.Nullable; * An implementation of java_binary. */ public class JavaBinary implements RuleConfiguredTargetFactory { - private static final PathFragment CPP_RUNTIMES = new PathFragment("_cpp_runtimes"); + private static final PathFragment CPP_RUNTIMES = PathFragment.create("_cpp_runtimes"); private final JavaSemantics semantics; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java index 95e1cc5a5d..7adaea6372 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBuildInfoFactory.java @@ -39,11 +39,11 @@ public abstract class JavaBuildInfoFactory implements BuildInfoFactory { public static final BuildInfoKey KEY = new BuildInfoKey("Java"); static final PathFragment BUILD_INFO_NONVOLATILE_PROPERTIES_NAME = - new PathFragment("build-info-nonvolatile.properties"); + PathFragment.create("build-info-nonvolatile.properties"); static final PathFragment BUILD_INFO_VOLATILE_PROPERTIES_NAME = - new PathFragment("build-info-volatile.properties"); + PathFragment.create("build-info-volatile.properties"); static final PathFragment BUILD_INFO_REDACTED_PROPERTIES_NAME = - new PathFragment("build-info-redacted.properties"); + PathFragment.create("build-info-redacted.properties"); private static final DateTimeFormatter DEFAULT_TIME_FORMAT = DateTimeFormat.forPattern("EEE MMM d HH:mm:ss yyyy"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index b5ab681d1f..1712d028b4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -502,7 +502,7 @@ public class JavaCommon { if (!javaExecutable.isAbsolute()) { javaExecutable = - new PathFragment(new PathFragment(ruleContext.getWorkspaceName()), javaExecutable); + PathFragment.create(PathFragment.create(ruleContext.getWorkspaceName()), javaExecutable); } javaExecutable = javaExecutable.normalize(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java index b115dee4c9..fc44f09b70 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHelper.java @@ -116,7 +116,7 @@ public abstract class JavaHelper { PathFragment rootRelativePath = resource.getRootRelativePath(); if (!resource.getOwner().getWorkspaceRoot().isEmpty()) { - PathFragment workspace = new PathFragment(resource.getOwner().getWorkspaceRoot()); + PathFragment workspace = PathFragment.create(resource.getOwner().getWorkspaceRoot()); rootRelativePath = rootRelativePath.relativeTo(workspace); } @@ -125,8 +125,8 @@ public abstract class JavaHelper { return semantics.getDefaultJavaResourcePath(rootRelativePath); } - PathFragment prefix = new PathFragment( - ruleContext.attributes().get("resource_strip_prefix", Type.STRING)); + PathFragment prefix = + PathFragment.create(ruleContext.attributes().get("resource_strip_prefix", Type.STRING)); if (!rootRelativePath.startsWith(prefix)) { ruleContext.attributeError("resource_strip_prefix", String.format( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java index 6501b31aac..4006bc872f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java @@ -153,7 +153,7 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor } private static Jvm createLegacy(String javaHome) throws InvalidConfigurationException { - PathFragment javaHomePathFrag = new PathFragment(javaHome); + PathFragment javaHomePathFrag = PathFragment.create(javaHome); if (!javaHomePathFrag.isAbsolute()) { throw new InvalidConfigurationException( "Illegal javabase value '" + javaHome + "', javabase must be an absolute path or label"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java index 6ec5120849..dc9e9e8ca7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java @@ -107,7 +107,7 @@ public abstract class NativeDepsHelper { return null; } - PathFragment labelName = new PathFragment(ruleContext.getLabel().getName()); + PathFragment labelName = PathFragment.create(ruleContext.getLabel().getName()); String libraryIdentifier = ruleContext.getUniqueDirectory(ANDROID_UNIQUE_DIR) .getRelative(labelName.replaceName("lib" + labelName.getBaseName())) .getPathString(); @@ -260,11 +260,11 @@ public abstract class NativeDepsHelper { * symlink for the native library for the specified rule. */ private static PathFragment getRuntimeLibraryPath(RuleContext ruleContext, Artifact lib) { - PathFragment relativePath = new PathFragment(ruleContext.getLabel().getName()); + PathFragment relativePath = PathFragment.create(ruleContext.getLabel().getName()); PathFragment libParentDir = relativePath.replaceName(lib.getExecPath().getParentDirectory().getBaseName()); String libName = lib.getExecPath().getBaseName(); - return new PathFragment(libParentDir, new PathFragment(libName)); + return PathFragment.create(libParentDir, PathFragment.create(libName)); } /** @@ -305,6 +305,6 @@ public abstract class NativeDepsHelper { for (String feature : features) { fp.addString(feature); } - return new PathFragment("_nativedeps/" + fp.hexDigestAndReset()); + return PathFragment.create("_nativedeps/" + fp.hexDigestAndReset()); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java index ab2bc95fa0..9d0e3c27c4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java @@ -345,7 +345,7 @@ final class BundleSupport { ruleContext.registerAction( ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("ConvertStringsPlist") - .setExecutable(new PathFragment("/usr/bin/plutil")) + .setExecutable(PathFragment.create("/usr/bin/plutil")) .setCommandLine(CustomCommandLine.builder() .add("-convert").add("binary1") .addExecPath("-o", bundled) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/Bundling.java b/src/main/java/com/google/devtools/build/lib/rules/objc/Bundling.java index 13bc0d97dd..39b05cbb3f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/Bundling.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/Bundling.java @@ -590,7 +590,7 @@ final class Bundling { public Map<String, String> variableSubstitutions() { return ImmutableMap.of( "EXECUTABLE_NAME", Strings.nullToEmpty(executableName), - "BUNDLE_NAME", new PathFragment(getBundleDir()).getBaseName(), + "BUNDLE_NAME", PathFragment.create(getBundleDir()).getBaseName(), "PRODUCT_NAME", name); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index c0859047de..6532052044 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -663,7 +663,7 @@ public abstract class CompilationSupport { ImmutableList.Builder<PathFragment> nonPropagatedHeaderSearchPaths = new ImmutableList.Builder<>(); for (String includeDirOption : includeDirOptions) { - nonPropagatedHeaderSearchPaths.add(new PathFragment(includeDirOption.substring(2))); + nonPropagatedHeaderSearchPaths.add(PathFragment.create(includeDirOption.substring(2))); } // We also need to add the -isystem directories from the CC header providers. ObjCommon diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java index f001f95115..b2642f1e33 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java @@ -190,7 +190,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport { throws InterruptedException { Preconditions.checkNotNull(ccToolchain); Preconditions.checkNotNull(fdoSupport); - PathFragment labelName = new PathFragment(ruleContext.getLabel().getName()); + PathFragment labelName = PathFragment.create(ruleContext.getLabel().getName()); String libraryIdentifier = ruleContext .getPackageDirectory() diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java b/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java index ad528645db..dcd8bca663 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/HeaderThinning.java @@ -104,7 +104,7 @@ public class HeaderThinning implements IncludeProcessing { continue; } - PathFragment headerPath = new PathFragment(line); + PathFragment headerPath = PathFragment.create(line); Artifact header = inputArtifactsMap.get(headerPath); if (header == null) { missing.add(headerPath); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java index 620010edd4..337ee963c6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java @@ -117,7 +117,7 @@ public final class IntermediateArtifacts { * of the {@link PathFragment} corresponding to the owner {@link Label}. */ private Artifact appendExtension(String extension) { - PathFragment name = new PathFragment(ruleContext.getLabel().getName()); + PathFragment name = PathFragment.create(ruleContext.getLabel().getName()); return scopedArtifact(name.replaceName(addOutputPrefix(name.getBaseName(), extension))); } @@ -135,7 +135,7 @@ public final class IntermediateArtifacts { * the end of the {@link PathFragment} corresponding to the owner {@link Label}. */ private Artifact appendExtensionInGenfiles(String extension) { - PathFragment name = new PathFragment(ruleContext.getLabel().getName()); + PathFragment name = PathFragment.create(ruleContext.getLabel().getName()); return scopedArtifact( name.replaceName(addOutputPrefix(name.getBaseName(), extension)), /* inGenfiles = */ true); } @@ -252,14 +252,14 @@ public final class IntermediateArtifacts { */ public Artifact archive() { // The path will be {RULE_PACKAGE}/lib{RULEBASENAME}{SUFFIX}.a - String basename = new PathFragment(ruleContext.getLabel().getName()).getBaseName(); - return scopedArtifact(new PathFragment(String.format( + String basename = PathFragment.create(ruleContext.getLabel().getName()).getBaseName(); + return scopedArtifact(PathFragment.create(String.format( "lib%s%s.a", basename, archiveFileNameSuffix))); } private Artifact inUniqueObjsDir(Artifact source, String extension) { PathFragment uniqueDir = - new PathFragment("_objs").getRelative(ruleContext.getLabel().getName()); + PathFragment.create("_objs").getRelative(ruleContext.getLabel().getName()); PathFragment sourceFile = uniqueDir.getRelative(source.getRootRelativePath()); PathFragment scopeRelativePath = FileSystemUtils.replaceExtension(sourceFile, extension); return scopedArtifact(scopeRelativePath); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java index ee9b83b8bd..60bfec11ba 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java @@ -94,13 +94,13 @@ public class IosFramework extends ReleaseBundlingTargetFactory { // Create framework binary Artifact frameworkBinary = - outputArtifact(ruleContext, new PathFragment(bundleName(ruleContext))); + outputArtifact(ruleContext, PathFragment.create(bundleName(ruleContext))); builder.put(intermediateArtifacts.combinedArchitectureBinary(), frameworkBinary); // Create framework headers for (Pair<Artifact, Label> header : headers) { Artifact frameworkHeader = - outputArtifact(ruleContext, new PathFragment("Headers/" + header.first.getFilename())); + outputArtifact(ruleContext, PathFragment.create("Headers/" + header.first.getFilename())); builder.put(header.first, frameworkHeader); } @@ -160,9 +160,9 @@ public class IosFramework extends ReleaseBundlingTargetFactory { */ private Artifact outputArtifact(RuleContext ruleContext, PathFragment path) { PathFragment frameworkRoot = - new PathFragment( - new PathFragment("_frameworks"), - new PathFragment(bundleName(ruleContext) + ".framework"), + PathFragment.create( + PathFragment.create("_frameworks"), + PathFragment.create(bundleName(ruleContext) + ".framework"), path); return ruleContext.getPackageRelativeArtifact( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java index 451af68adf..2b14cca296 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibrary.java @@ -111,7 +111,7 @@ public class J2ObjcLibrary implements RuleConfiguredTargetFactory { // We add another header search path with gen root if we have generated sources to translate. for (Artifact sourceToTranslate : sourcesToTranslate) { if (!sourceToTranslate.isSourceArtifact()) { - headerSearchPaths.add(new PathFragment(objcFileRootExecPath, genRoot)); + headerSearchPaths.add(PathFragment.create(objcFileRootExecPath, genRoot)); return headerSearchPaths.build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index ad677f6a89..3480cfcdef 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -686,7 +686,7 @@ public final class ObjcCommon { static ImmutableSet<PathFragment> userHeaderSearchPaths( ObjcProvider provider, BuildConfiguration config) { return ImmutableSet.<PathFragment>builder() - .add(new PathFragment(".")) + .add(PathFragment.create(".")) .add(config.getGenfilesFragment()) .addAll(provider.get(IQUOTE)) .build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java index 46665908ee..03c2ae243f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java @@ -119,7 +119,7 @@ public class ObjcProviderSkylarkConverters { validateTypes(skylarkValue, String.class, javaKey.getSkylarkKeyName()); NestedSetBuilder<PathFragment> result = NestedSetBuilder.stableOrder(); for (String path : ((SkylarkNestedSet) skylarkValue).toCollection(String.class)) { - result.add(new PathFragment(path)); + result.add(PathFragment.create(path)); } return result.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java index 455ee70391..2505835104 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java @@ -551,7 +551,7 @@ final class ProtobufSupport { // of dependers. PathFragment rootRelativeOutputDir = ruleContext.getUniqueDirectory(UNIQUE_DIRECTORY_NAME); - return new PathFragment( + return PathFragment.create( buildConfiguration.getBinDirectory().getExecPath(), rootRelativeOutputDir); } @@ -562,10 +562,9 @@ final class ProtobufSupport { String protoFileName = FileSystemUtils.removeExtension(protoFile.getFilename()); String generatedOutputName = attributes.getGeneratedProtoFilename(protoFileName, true); - PathFragment generatedFilePath = - new PathFragment( - protoFile.getRootRelativePath().getParentDirectory(), - new PathFragment(generatedOutputName)); + PathFragment generatedFilePath = PathFragment.create( + protoFile.getRootRelativePath().getParentDirectory(), + PathFragment.create(generatedOutputName)); PathFragment outputFile = FileSystemUtils.appendExtension(generatedFilePath, extension); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java index 54d8904492..0a19cb18ca 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java @@ -86,7 +86,7 @@ final class ProtocolBuffers2Support { .addInputs(attributes.getOptionsFile().asSet()) .addOutputs(getGeneratedProtoOutputs(getHeaderExtension())) .addOutputs(getGeneratedProtoOutputs(getSourceExtension())) - .setExecutable(new PathFragment("/usr/bin/python")) + .setExecutable(PathFragment.create("/usr/bin/python")) .setCommandLine(getGenerationCommandLine()) .build(ruleContext)); return this; @@ -203,9 +203,8 @@ final class ProtocolBuffers2Support { new ImmutableSet.Builder<PathFragment>().add(getWorkspaceRelativeOutputDir()); if (attributes.needsPerProtoIncludes()) { - PathFragment generatedProtoDir = - new PathFragment( - getWorkspaceRelativeOutputDir(), ruleContext.getLabel().getPackageFragment()); + PathFragment generatedProtoDir = PathFragment.create( + getWorkspaceRelativeOutputDir(), ruleContext.getLabel().getPackageFragment()); searchPathEntriesBuilder .add(generatedProtoDir) @@ -223,7 +222,7 @@ final class ProtocolBuffers2Support { // of dependers. PathFragment rootRelativeOutputDir = ruleContext.getUniqueDirectory(UNIQUE_DIRECTORY_NAME); - return new PathFragment( + return PathFragment.create( ruleContext.getBinOrGenfilesDirectory().getExecPath(), rootRelativeOutputDir); } @@ -233,10 +232,9 @@ final class ProtocolBuffers2Support { String protoFileName = FileSystemUtils.removeExtension(protoFile.getFilename()); String generatedOutputName = attributes.getGeneratedProtoFilename(protoFileName, false); - PathFragment generatedFilePath = - new PathFragment( - protoFile.getRootRelativePath().getParentDirectory(), - new PathFragment(generatedOutputName)); + PathFragment generatedFilePath = PathFragment.create( + protoFile.getRootRelativePath().getParentDirectory(), + PathFragment.create(generatedOutputName)); PathFragment outputFile = FileSystemUtils.appendExtension(generatedFilePath, extension); diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java index 6ba951753d..7f38142785 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java @@ -41,7 +41,8 @@ import java.util.List; * to identify these proto files and avoid linking in their associated generated files. */ public class ProtoSourceFileBlacklist { - private static final PathFragment BAZEL_TOOLS_PREFIX = new PathFragment("external/bazel_tools/"); + private static final PathFragment BAZEL_TOOLS_PREFIX = + PathFragment.create("external/bazel_tools/"); private final RuleContext ruleContext; private final ImmutableSet<PathFragment> blacklistProtoFilePaths; diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java index a343883816..2036401394 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java @@ -410,7 +410,7 @@ public final class PyCommon { } mainSourceName = ruleName + ".py"; } - PathFragment mainSourcePath = new PathFragment(mainSourceName); + PathFragment mainSourcePath = PathFragment.create(mainSourceName); Artifact mainArtifact = null; for (Artifact outItem : ruleContext.getPrerequisiteArtifacts("srcs", Mode.TARGET).list()) { @@ -433,8 +433,8 @@ public final class PyCommon { if (!withWorkspaceName) { return mainArtifact.getRunfilesPath().getPathString(); } - PathFragment workspaceName = new PathFragment( - ruleContext.getRule().getPackage().getWorkspaceName()); + PathFragment workspaceName = + PathFragment.create(ruleContext.getRule().getPackage().getWorkspaceName()); return workspaceName.getRelative(mainArtifact.getRunfilesPath()).getPathString(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java index c2508c2f94..ebe030fa41 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java @@ -35,8 +35,8 @@ import java.util.Set; * Various utility methods for Python support. */ public final class PythonUtils { - public static final PathFragment INIT_PY = new PathFragment("__init__.py"); - public static final PathFragment INIT_PYC = new PathFragment("__init__.pyc"); + public static final PathFragment INIT_PY = PathFragment.create("__init__.py"); + public static final PathFragment INIT_PYC = PathFragment.create("__init__.pyc"); private static final FileType REQUIRES_INIT_PY = FileType.of(".py", ".so", ".pyc"); @@ -86,7 +86,7 @@ public final class PythonUtils { private static Artifact get2to3OutputArtifact(RuleContext ruleContext, Artifact input) { Root root = ruleContext.getConfiguration().getGenfilesDirectory( ruleContext.getRule().getRepository()); - PathFragment path = new PathFragment("python3").getRelative(input.getRootRelativePath()); + PathFragment path = PathFragment.create("python3").getRelative(input.getRootRelativePath()); return ruleContext.getShareableArtifact(path, root); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java b/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java index 29efc78faa..64c4502b71 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/NewRepositoryFileHandler.java @@ -195,7 +195,7 @@ public class NewRepositoryFileHandler { } } else { // TODO(dmarting): deprecate using a path for the workspace_file attribute. - PathFragment file = new PathFragment(fileAttribute); + PathFragment file = PathFragment.create(fileAttribute); Path fileTarget = workspacePath.getRelative(file); if (!fileTarget.exists()) { throw new RepositoryFunctionException( @@ -211,7 +211,7 @@ public class NewRepositoryFileHandler { if (file.isAbsolute()) { rootedFile = RootedPath.toRootedPath( - fileTarget.getParentDirectory(), new PathFragment(fileTarget.getBaseName())); + fileTarget.getParentDirectory(), PathFragment.create(fileTarget.getBaseName())); } else { rootedFile = RootedPath.toRootedPath(workspacePath, file); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java index 0b92f0ac7a..51486eda50 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java @@ -298,7 +298,7 @@ public abstract class RepositoryFunction { } catch (EvalException e) { throw new RepositoryFunctionException(e, Transience.PERSISTENT); } - PathFragment pathFragment = new PathFragment(path); + PathFragment pathFragment = PathFragment.create(path); return workspace.getRelative(pathFragment).asFragment(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java index 19af038d62..c6040de671 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java @@ -52,7 +52,7 @@ public class RepositoryLoaderFunction implements SkyFunction { SkyKey workspaceKey = WorkspaceFileValue.key( - RootedPath.toRootedPath(repository.getPath(), new PathFragment("WORKSPACE"))); + RootedPath.toRootedPath(repository.getPath(), PathFragment.create("WORKSPACE"))); WorkspaceFileValue workspacePackage = (WorkspaceFileValue) env.getValue(workspaceKey); if (workspacePackage == null) { return null; diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java index 8b7dea8469..7f42c03889 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java @@ -116,7 +116,7 @@ public final class BaselineCoverageAction extends AbstractFileWriteAction RuleContext ruleContext, NestedSet<Artifact> instrumentedFiles) { // Baseline coverage artifacts will still go into "testlogs" directory. Artifact coverageData = ruleContext.getPackageRelativeArtifact( - new PathFragment(ruleContext.getTarget().getName()).getChild("baseline_coverage.dat"), + PathFragment.create(ruleContext.getTarget().getName()).getChild("baseline_coverage.dat"), ruleContext.getConfiguration().getTestLogsDirectory( ruleContext.getRule().getRepository())); ruleContext.registerAction(new BaselineCoverageAction( diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java index da7963576e..5624b2bddb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestActionBuilder.java @@ -88,7 +88,7 @@ public final class TestActionBuilder { // heuristically sharding is currently experimental. Also, we do detect // false-positive cases and return an error. return runfilesSupport.getRunfilesSymlinkNames().contains( - new PathFragment("tools/test_sharding_compliant")); + PathFragment.create("tools/test_sharding_compliant")); } /** @@ -180,7 +180,7 @@ public final class TestActionBuilder { * TestResultAnalyzer to keep track of completed and pending test runs. */ private TestParams createTestAction(int shards) { - PathFragment targetName = new PathFragment(ruleContext.getLabel().getName()); + PathFragment targetName = PathFragment.create(ruleContext.getLabel().getName()); BuildConfiguration config = ruleContext.getConfiguration(); AnalysisEnvironment env = ruleContext.getAnalysisEnvironment(); Root root = config.getTestLogsDirectory(ruleContext.getRule().getRepository()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java index 01ea45134a..d6c4d45c6d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java @@ -58,7 +58,7 @@ import javax.annotation.Nullable; */ // Not final so that we can mock it in tests. public class TestRunnerAction extends AbstractAction implements NotifyOnActionCacheHit { - public static final PathFragment COVERAGE_TMP_ROOT = new PathFragment("_coverage"); + public static final PathFragment COVERAGE_TMP_ROOT = PathFragment.create("_coverage"); // Used for selecting subset of testcase / testmethods. private static final String TEST_BRIDGE_TEST_FILTER_ENV = "TESTBRIDGE_TEST_ONLY"; @@ -134,7 +134,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa boolean useTestRunner) { super(owner, inputs, // Note that this action only cares about the runfiles, not the mapping. - new RunfilesSupplierImpl(new PathFragment("runfiles"), executionSettings.getRunfiles()), + new RunfilesSupplierImpl(PathFragment.create("runfiles"), executionSettings.getRunfiles()), list(testLog, cacheStatus, coverageArtifact, microCoverageArtifact)); this.runtime = runtime; this.configuration = Preconditions.checkNotNull(configuration); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/CoverageCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/CoverageCommand.java index 2e9e9de4df..833e01145d 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/CoverageCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/CoverageCommand.java @@ -289,7 +289,7 @@ public class CoverageCommand extends TestCommand { // filter value much more user-friendly - especially in case of /my/package/... wildcards. Set<String> parentFilters = Sets.newTreeSet(); String filterString = iterator.next(); - PathFragment parent = new PathFragment(filterString).getParentDirectory(); + PathFragment parent = PathFragment.create(filterString).getParentDirectory(); while (iterator.hasNext()) { String current = iterator.next(); if (parent != null && parent.getPathString().length() > 0 @@ -297,7 +297,7 @@ public class CoverageCommand extends TestCommand { parentFilters.add(parent.getPathString()); } else { filterString = current; - parent = new PathFragment(filterString).getParentDirectory(); + parent = PathFragment.create(filterString).getParentDirectory(); } } packageFilters.addAll(parentFilters); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java index 3d3a9b0066..4f738c7a46 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java @@ -58,7 +58,7 @@ public final class ProjectFileSupport { // TODO(bazel-team): This is currently treated as a path relative to the workspace - if the // cwd is a subdirectory of the workspace, that will be surprising, and we should interpret it // relative to the cwd instead. - PathFragment projectFilePath = new PathFragment(targets.get(0).substring(1)); + PathFragment projectFilePath = PathFragment.create(targets.get(0).substring(1)); List<Path> packagePath = PathPackageLocator.create( env.getOutputBase(), optionsParser.getOptions(PackageCacheOptions.class).packagePath, diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedStrategy.java b/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedStrategy.java index 2eff7c45cc..0a649e93e6 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/DarwinSandboxedStrategy.java @@ -324,7 +324,7 @@ public class DarwinSandboxedStrategy extends SandboxStrategy { TestRunnerAction testRunnerAction = ((TestRunnerAction) spawn.getResourceOwner()); RunUnder runUnder = testRunnerAction.getExecutionSettings().getRunUnder(); if (runUnder != null && runUnder.getCommand() != null) { - PathFragment sourceFragment = new PathFragment(runUnder.getCommand()); + PathFragment sourceFragment = PathFragment.create(runUnder.getCommand()); Path mount; if (sourceFragment.isAbsolute()) { mount = blazeDirs.getFileSystem().getPath(sourceFragment); diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java index e30008e3ae..26fd236adf 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java @@ -51,7 +51,7 @@ public final class SandboxHelpers { public static ImmutableSet<PathFragment> getOutputFiles(Spawn spawn) { Builder<PathFragment> outputFiles = ImmutableSet.builder(); for (ActionInput output : spawn.getOutputFiles()) { - outputFiles.add(new PathFragment(output.getExecPathString())); + outputFiles.add(PathFragment.create(output.getExecPathString())); } return outputFiles.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SpawnHelpers.java b/src/main/java/com/google/devtools/build/lib/sandbox/SpawnHelpers.java index d8bb0a7f58..b6bd3c017e 100644 --- a/src/main/java/com/google/devtools/build/lib/sandbox/SpawnHelpers.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/SpawnHelpers.java @@ -108,7 +108,7 @@ public final class SpawnHelpers { // symlink referring to "source" has to be created (see below). PathFragment targetPath; if (isFilesetManifest) { - PathFragment targetPathFragment = new PathFragment(fields[0]); + PathFragment targetPathFragment = PathFragment.create(fields[0]); if (!workspaceName.isEmpty()) { Preconditions.checkState( targetPathFragment.getSegment(0).equals(workspaceName), @@ -176,7 +176,7 @@ public final class SpawnHelpers { // Attempting to mount a non-empty directory results in ERR_DIRECTORY_NOT_EMPTY, so we only // mount empty TreeArtifacts as directories. if (containedArtifacts.isEmpty()) { - PathFragment mount = new PathFragment(input.getExecPathString()); + PathFragment mount = PathFragment.create(input.getExecPathString()); mounts.put(mount, execRoot.getRelative(mount)); } } @@ -186,7 +186,7 @@ public final class SpawnHelpers { if (input.getExecPathString().contains("internal/_middlemen/")) { continue; } - PathFragment mount = new PathFragment(input.getExecPathString()); + PathFragment mount = PathFragment.create(input.getExecPathString()); mounts.put(mount, execRoot.getRelative(mount)); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java index 11c78aefc8..a3c6768c96 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java @@ -85,7 +85,7 @@ public class BlacklistedPackagePrefixesFunction implements SkyFunction { @Override public boolean processLine(String line) throws IOException { if (!line.isEmpty()) { - fragments.add(new PathFragment(line)); + fragments.add(PathFragment.create(line)); } return true; } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java index f06be6bad2..aa91104394 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java @@ -128,7 +128,7 @@ public class FileFunction implements SkyFunction { if (parentFileValue == null) { return null; } - PathFragment baseName = new PathFragment(relativePath.getBaseName()); + PathFragment baseName = PathFragment.create(relativePath.getBaseName()); RootedPath parentRealRootedPath = parentFileValue.realRootedPath(); realRootedPath = RootedPath.toRootedPath(parentRealRootedPath.getRoot(), parentRealRootedPath.getRelativePath().getRelative(baseName)); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java index f95274c648..fe23f379b4 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java @@ -217,7 +217,7 @@ public final class FilesetEntryFunction implements SkyFunction { public boolean apply(String e) { // Keep the top-level exclusions only. Do not look for "/" but count the path segments // instead, in anticipation of future Windows support. - return new PathFragment(e).segmentCount() == 1; + return PathFragment.create(e).segmentCount() == 1; } }); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java index 753f920cab..4874d89d5c 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java @@ -79,7 +79,7 @@ public abstract class LocalDiffAwareness implements DiffAwareness { // There's no good way to automatically detect network file systems. We rely on a blacklist // for now (and maybe add a command-line option in the future?). for (String prefix : prefixBlacklist) { - if (resolvedPathEntryFragment.startsWith(new PathFragment(prefix))) { + if (resolvedPathEntryFragment.startsWith(PathFragment.create(prefix))) { return null; } } @@ -188,7 +188,7 @@ public abstract class LocalDiffAwareness implements DiffAwareness { public PathFragment apply(Path input) { Preconditions.checkArgument( input.startsWith(watchRootPath), "%s %s", input, watchRootPath); - return new PathFragment(watchRootPath.relativize(input).toString()); + return PathFragment.create(watchRootPath.relativize(input).toString()); } }; } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java index e134350061..ae4b250971 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java @@ -208,7 +208,7 @@ public class LocalRepositoryLookupFunction implements SkyFunction { @Override public boolean apply(@Nullable Rule rule) { AggregatingAttributeMapper mapper = AggregatingAttributeMapper.of(rule); - PathFragment pathAttr = new PathFragment(mapper.get("path", Type.STRING)); + PathFragment pathAttr = PathFragment.create(mapper.get("path", Type.STRING)); return directory.getRelativePath().equals(pathAttr); } }, diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java index 1941489a77..23ecccec99 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java @@ -101,7 +101,7 @@ public class PackageFunction implements SkyFunction { // Not final only for testing. @Nullable private SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining; - static final PathFragment DEFAULTS_PACKAGE_NAME = new PathFragment("tools/defaults"); + static final PathFragment DEFAULTS_PACKAGE_NAME = PathFragment.create("tools/defaults"); public PackageFunction( PackageFactory packageFactory, @@ -819,7 +819,7 @@ public class PackageFunction implements SkyFunction { // exceptions), it reaches here, and we tolerate it. return false; } - PathFragment labelNameFragment = new PathFragment(label.getName()); + PathFragment labelNameFragment = PathFragment.create(label.getName()); String message = String.format("Label '%s' crosses boundary of subpackage '%s'", label, containingPkg); Path containingRoot = containingPkgLookupValue.getContainingPackageRoot(); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java index 32d1e9007f..7db3a2abdd 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java @@ -43,7 +43,7 @@ public abstract class PackageLookupValue implements SkyValue { WORKSPACE("WORKSPACE") { @Override public PathFragment getBuildFileFragment(PackageIdentifier packageIdentifier) { - return new PathFragment(BuildFileName.WORKSPACE.getFilename()); + return PathFragment.create(BuildFileName.WORKSPACE.getFilename()); } }, BUILD("BUILD") { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java index 8cc2d812c5..41602146ad 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java @@ -56,7 +56,7 @@ public class WorkspaceASTFunction implements SkyFunction { try { BuildFileAST ast = BuildFileAST.parseBuildFile( ParserInputSource.create(ruleClassProvider.getDefaultWorkspacePrefix(), - new PathFragment("/DEFAULT.WORKSPACE")), + PathFragment.create("/DEFAULT.WORKSPACE")), env.getListener()); if (ast.containsErrors()) { throw new WorkspaceASTFunctionException( @@ -76,7 +76,7 @@ public class WorkspaceASTFunction implements SkyFunction { } ast = BuildFileAST.parseBuildFile( ParserInputSource.create(ruleClassProvider.getDefaultWorkspaceSuffix(), - new PathFragment("/DEFAULT.WORKSPACE.SUFFIX")), + PathFragment.create("/DEFAULT.WORKSPACE.SUFFIX")), ast.getStatements(), env.getListener()); if (ast.containsErrors()) { diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java index 44d4a9b616..9d28ee8b19 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java @@ -119,7 +119,7 @@ public class SkylarkImports { @Override public PathFragment asPathFragment() { - return new PathFragment(importFile); + return PathFragment.create(importFile); } @Override @@ -128,7 +128,7 @@ public class SkylarkImports { // a subdirectory of the package that contains it. We need to construct a Label with // the imported file in the same subdirectory of the package. PathFragment containingDirInPkg = - (new PathFragment(containingFileLabel.getName())).getParentDirectory(); + PathFragment.create(containingFileLabel.getName()).getParentDirectory(); String targetNameForImport = containingDirInPkg.getRelative(importFile).toString(); try { return containingFileLabel.getRelative(targetNameForImport); @@ -151,7 +151,7 @@ public class SkylarkImports { @Override public PathFragment asPathFragment() { - return new PathFragment(PathFragment.ROOT_DIR).getRelative(importLabel.toPathFragment()); + return PathFragment.create(PathFragment.ROOT_DIR).getRelative(importLabel.toPathFragment()); } @Override @@ -173,7 +173,7 @@ public class SkylarkImports { @Override public PathFragment asPathFragment() { - return new PathFragment(importTarget); + return PathFragment.create(importTarget); } @Override @@ -253,7 +253,7 @@ public class SkylarkImports { if (importString.endsWith(".bzl")) { throw new SkylarkImportSyntaxException(INVALID_PATH_SYNTAX); } - PathFragment importPath = new PathFragment(importString + ".bzl"); + PathFragment importPath = PathFragment.create(importString + ".bzl"); return new AbsolutePathImport(importString, importPath); } else if (importString.startsWith(":")) { // Relative label. We require that relative labels use an explicit ':' prefix to distinguish diff --git a/src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java b/src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java index c21848a9f7..c70420ba7d 100644 --- a/src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java @@ -334,7 +334,7 @@ public class UnixFileSystem extends AbstractFileSystemWithCustomStat { String name = path.toString(); long startTime = Profiler.nanoTimeMaybe(); try { - return new PathFragment(NativePosixFiles.readlink(name)); + return PathFragment.create(NativePosixFiles.readlink(name)); } catch (IOException e) { // EINVAL => not a symbolic link. Anything else is a real error. throw e.getMessage().endsWith("(Invalid argument)") ? new NotASymlinkException(path) : e; diff --git a/src/main/java/com/google/devtools/build/lib/util/OptionsUtils.java b/src/main/java/com/google/devtools/build/lib/util/OptionsUtils.java index 5ad34d7a34..3013f3e23e 100644 --- a/src/main/java/com/google/devtools/build/lib/util/OptionsUtils.java +++ b/src/main/java/com/google/devtools/build/lib/util/OptionsUtils.java @@ -135,7 +135,7 @@ public final class OptionsUtils { @Override public PathFragment convert(String input) { - return new PathFragment(input); + return PathFragment.create(input); } @Override @@ -155,7 +155,7 @@ public final class OptionsUtils { List<PathFragment> list = new ArrayList<>(); for (String piece : input.split(":")) { if (!piece.isEmpty()) { - list.add(new PathFragment(piece)); + list.add(PathFragment.create(piece)); } } return Collections.unmodifiableList(list); diff --git a/src/main/java/com/google/devtools/build/lib/util/PathFragmentFilter.java b/src/main/java/com/google/devtools/build/lib/util/PathFragmentFilter.java index d4eb7d7474..8262c75a16 100644 --- a/src/main/java/com/google/devtools/build/lib/util/PathFragmentFilter.java +++ b/src/main/java/com/google/devtools/build/lib/util/PathFragmentFilter.java @@ -51,9 +51,9 @@ public class PathFragmentFilter implements Serializable { for (String piece : Splitter.on(',').split(input)) { if (piece.length() > 1 && piece.startsWith("-")) { - exclusionList.add(new PathFragment(piece.substring(1))); + exclusionList.add(PathFragment.create(piece.substring(1))); } else if (piece.length() > 0) { - inclusionList.add(new PathFragment(piece)); + inclusionList.add(PathFragment.create(piece)); } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/FileSystem.java b/src/main/java/com/google/devtools/build/lib/vfs/FileSystem.java index bce290eaf4..d77c1d7a3b 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/FileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/FileSystem.java @@ -131,7 +131,7 @@ public abstract class FileSystem { * file system. */ public Path getPath(String pathName) { - return getPath(new PathFragment(pathName)); + return getPath(PathFragment.create(pathName)); } /** diff --git a/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java b/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java index 9cc3dc78d8..5b3bc1e717 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java @@ -109,7 +109,7 @@ public class FileSystemUtils { */ public static PathFragment relativePath(PathFragment fromDir, PathFragment to) { if (to.equals(fromDir)) { - return new PathFragment("."); // same dir, just return '.' + return PathFragment.create("."); // same dir, just return '.' } if (to.startsWith(fromDir)) { return to.relativeTo(fromDir); // easy case--it's a descendant @@ -123,7 +123,7 @@ public class FileSystemUtils { for (int i = 0; i < levels; i++) { dotdots.append("../"); } - return new PathFragment(dotdots.toString()).getRelative(to.relativeTo(ancestor)); + return PathFragment.create(dotdots.toString()).getRelative(to.relativeTo(ancestor)); } /** @@ -229,9 +229,10 @@ public class FileSystemUtils { int count = path.segmentCount(); for (int i = 0; i < count; i++) { if (path.getSegment(i).equals(oldSegment)) { - path = new PathFragment(path.subFragment(0, i), - new PathFragment(newSegment), - path.subFragment(i+1, count)); + path = PathFragment.create( + path.subFragment(0, i), + PathFragment.create(newSegment), + path.subFragment(i+1, count)); if (!replaceAll) { return path; } @@ -287,7 +288,7 @@ public class FileSystemUtils { * 'user.dir'. This version does not require a {@link FileSystem}. */ public static PathFragment getWorkingDirectory() { - return new PathFragment(System.getProperty("user.dir", "/")); + return PathFragment.create(System.getProperty("user.dir", "/")); } /**************************************************************************** @@ -356,7 +357,7 @@ public class FileSystemUtils { */ @ThreadSafe // but not atomic public static void ensureSymbolicLink(Path link, String target) throws IOException { - ensureSymbolicLink(link, new PathFragment(target)); + ensureSymbolicLink(link, PathFragment.create(target)); } /** diff --git a/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java b/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java index e4099693a6..2512308808 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/JavaIoFileSystem.java @@ -279,7 +279,7 @@ public class JavaIoFileSystem extends AbstractFileSystemWithCustomStat { long startTime = Profiler.nanoTimeMaybe(); try { String link = Files.readSymbolicLink(file.toPath()).toString(); - return new PathFragment(link); + return PathFragment.create(link); } catch (java.nio.file.NotLinkException e) { throw new NotASymlinkException(path); } catch (java.nio.file.NoSuchFileException e) { 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 e4088416cc..ac8b756696 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 @@ -223,7 +223,7 @@ public class Path implements Comparable<Path>, Serializable { private void readObject(ObjectInputStream in) throws IOException { fileSystem = fileSystemForSerialization; String p = in.readUTF(); - PathFragment pf = new PathFragment(p); + PathFragment pf = PathFragment.create(p); PathFragment parentDir = pf.getParentDirectory(); if (parentDir == null) { this.name = "/"; @@ -725,9 +725,9 @@ public class Path implements Comparable<Path>, Serializable { } else if (path.equals("..")) { return isTopLevelDirectory() ? this : parent; } else if (path.indexOf('/') != -1) { - return getRelative(new PathFragment(path)); + return getRelative(PathFragment.create(path)); } else if (path.indexOf(PathFragment.EXTRA_SEPARATOR_CHAR) != -1) { - return getRelative(new PathFragment(path)); + return getRelative(PathFragment.create(path)); } else { return getCachedChildPath(path); } @@ -745,7 +745,7 @@ public class Path implements Comparable<Path>, Serializable { /** Returns an absolute PathFragment representing this path. */ public PathFragment asFragment() { - return new PathFragment('\0', true, getSegments()); + return PathFragment.createNoClone('\0', true, getSegments()); } /** @@ -777,7 +777,7 @@ public class Path implements Comparable<Path>, Serializable { currentPath = currentPath.getParentDirectory(); } if (ancestorPath.equals(currentPath)) { - return new PathFragment('\0', false, resultSegments); + return PathFragment.createNoClone('\0', false, resultSegments); } } } 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 b466fc9629..5a324bec60 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 @@ -57,13 +57,13 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl public static final String ROOT_DIR = "/"; /** An empty path fragment. */ - public static final PathFragment EMPTY_FRAGMENT = new PathFragment(""); + public static final PathFragment EMPTY_FRAGMENT = create(""); public static final Function<String, PathFragment> TO_PATH_FRAGMENT = new Function<String, PathFragment>() { @Override public PathFragment apply(String str) { - return new PathFragment(str); + return create(str); } }; @@ -89,7 +89,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl for (int i = 0; i < segments.length; i++) { internedSegments[i] = StringCanonicalizer.intern(segments[i]); } - return new PathFragment(driveLetter, isAbsolute, internedSegments); + return createNoClone(driveLetter, isAbsolute, internedSegments); } /** Same as {@link #create(char, boolean, String[])}, except for {@link List}s of segments. */ @@ -98,7 +98,40 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl for (int i = 0; i < segments.size(); i++) { internedSegments[i] = StringCanonicalizer.intern(segments.get(i)); } - return new PathFragment(driveLetter, isAbsolute, internedSegments); + return createNoClone(driveLetter, isAbsolute, internedSegments); + } + + /** + * Construct a PathFragment from a java.io.File, which is an absolute or + * relative UNIX path. Does not support Windows-style Files. + */ + public static PathFragment create(File path) { + return new PathFragment(path); + } + + /** + * Construct a PathFragment from a string, which is an absolute or relative UNIX or Windows path. + */ + public static PathFragment create(String path) { + return new PathFragment(path); + } + + /** + * Constructs a PathFragment, taking ownership of segments. Package-private, + * because it does not perform a defensive clone of the segments array. Used + * here in PathFragment, and by Path.asFragment() and Path.relativeTo(). + */ + static PathFragment createNoClone( + char driveLetter, boolean isAbsolute, String[] segments) { + return new PathFragment(driveLetter, isAbsolute, segments); + } + + /** + * Construct a PathFragment from a sequence of other PathFragments. The new + * fragment will be absolute iff the first fragment was absolute. + */ + public static PathFragment create(PathFragment first, PathFragment second, PathFragment... more) { + return new PathFragment(first, second, more); } // We have 3 word-sized fields (segments, hashCode and path), and 2 @@ -121,9 +154,8 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl private int hashCode; private String path; - /** - * Construct a PathFragment from a string, which is an absolute or relative UNIX or Windows path. - */ + /** Don't call this ctor; use {@link #create(String)} instead. */ + @Deprecated public PathFragment(String path) { this.driveLetter = (OS.getCurrent() == OS.WINDOWS @@ -145,20 +177,11 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl return c == SEPARATOR_CHAR || c == EXTRA_SEPARATOR_CHAR; } - /** - * Construct a PathFragment from a java.io.File, which is an absolute or - * relative UNIX path. Does not support Windows-style Files. - */ - public PathFragment(File path) { + private PathFragment(File path) { this(path.getPath()); } - /** - * Constructs a PathFragment, taking ownership of segments. Package-private, - * because it does not perform a defensive clone of the segments array. Used - * here in PathFragment, and by Path.asFragment() and Path.relativeTo(). - */ - PathFragment(char driveLetter, boolean isAbsolute, String[] segments) { + private PathFragment(char driveLetter, boolean isAbsolute, String[] segments) { driveLetter = Character.toUpperCase(driveLetter); if (OS.getCurrent() == OS.WINDOWS && segments.length > 0 @@ -175,11 +198,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl this.segments = segments; } - /** - * Construct a PathFragment from a sequence of other PathFragments. The new - * fragment will be absolute iff the first fragment was absolute. - */ - public PathFragment(PathFragment first, PathFragment second, PathFragment... more) { + private PathFragment(PathFragment first, PathFragment second, PathFragment... more) { // TODO(bazel-team): The handling of absolute path fragments in this constructor is unexpected. this.segments = new String[sumLengths(first, second, more)]; int offset = 0; @@ -420,8 +439,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl return this; } - return new PathFragment(driveLetter, isAbsolute, - subarray(scratchSegments, 0, segmentCount)); + return createNoClone(driveLetter, isAbsolute, subarray(scratchSegments, 0, segmentCount)); } /** @@ -440,9 +458,9 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl if (otherFragment.isAbsolute()) { return this.driveLetter == '\0' || otherFragment.driveLetter != '\0' ? otherFragment - : new PathFragment(this.driveLetter, true, otherFragment.segments); + : createNoClone(this.driveLetter, true, otherFragment.segments); } else { - return new PathFragment(this, otherFragment); + return create(this, otherFragment); } } @@ -455,7 +473,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl * with no path normalization or I/O performed. */ public PathFragment getRelative(String path) { - return getRelative(new PathFragment(path)); + return getRelative(create(path)); } /** @@ -474,7 +492,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl baseName = StringCanonicalizer.intern(baseName); String[] newSegments = Arrays.copyOf(segments, segments.length + 1); newSegments[newSegments.length - 1] = baseName; - return new PathFragment(driveLetter, isAbsolute, newSegments); + return createNoClone(driveLetter, isAbsolute, newSegments); } /** @@ -525,14 +543,14 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl int length = segments.length - ancestorLength; String[] resultSegments = subarray(segments, ancestorLength, length); - return new PathFragment('\0', false, resultSegments); + return createNoClone('\0', false, resultSegments); } /** * Returns a relative path fragment to this path, relative to {@code path}. */ public PathFragment relativeTo(String path) { - return relativeTo(new PathFragment(path)); + return relativeTo(create(path)); } /** @@ -619,8 +637,11 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl toString(), beginIndex, endIndex)); } boolean isAbsolute = (beginIndex == 0) && this.isAbsolute; - return ((beginIndex == 0) && (endIndex == count)) ? this : - new PathFragment(driveLetter, isAbsolute, + return ((beginIndex == 0) && (endIndex == count)) + ? this + : createNoClone( + driveLetter, + isAbsolute, subarray(segments, beginIndex, endIndex - beginIndex)); } @@ -698,7 +719,7 @@ public final class PathFragment implements Comparable<PathFragment>, Serializabl */ public PathFragment toRelative() { Preconditions.checkArgument(isAbsolute); - return new PathFragment(driveLetter, false, segments); + return createNoClone(driveLetter, false, segments); } private boolean isEmpty() { diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentSerializationProxy.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentSerializationProxy.java index 7e4a1f036f..39aefd1318 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentSerializationProxy.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragmentSerializationProxy.java @@ -44,7 +44,7 @@ public final class PathFragmentSerializationProxy implements Externalizable { } private Object readResolve() { - return new PathFragment(pathFragmentString); + return PathFragment.create(pathFragmentString); } } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/SearchPath.java b/src/main/java/com/google/devtools/build/lib/vfs/SearchPath.java index 7f7d8c7ed2..764ed0ddfd 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/SearchPath.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/SearchPath.java @@ -37,7 +37,7 @@ public class SearchPath { return paths; } for (String p : SEPARATOR.split(searchPath)) { - PathFragment pf = new PathFragment(p); + PathFragment pf = PathFragment.create(p); if (pf.isAbsolute()) { paths.add(fs.getPath(pf)); @@ -53,7 +53,7 @@ public class SearchPath { */ @Nullable public static Path which(List<Path> searchPath, String exe) { - PathFragment fragment = new PathFragment(exe); + PathFragment fragment = PathFragment.create(exe); if (fragment.segmentCount() != 1 || fragment.isAbsolute()) { return null; } diff --git a/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java b/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java index d7ad308728..353a684a82 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java @@ -160,7 +160,7 @@ public class ZipFileSystem extends ReadonlyFileSystem implements Closeable { private Collection<Path> populatePathTree() { Collection<Path> paths = new ArrayList<>(); for (ZipEntry entry : Collections.list(zipFile.entries())) { - PathFragment frag = new PathFragment(entry.getName()); + PathFragment frag = PathFragment.create(entry.getName()); Path path = rootPath.getRelative(frag); paths.add(path); ((ZipPath) path).setZipEntry(entry); diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java index 710319f58e..77197d7c41 100644 --- a/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java @@ -80,7 +80,7 @@ public class WindowsFileSystem extends JavaIoFileSystem { // the path, except the last one, is already canonicalized, so we can return just that. // Plus the returned value is passed to Path.getChild so we must not return a full // path here. - return new PathFragment(WindowsFileOperations.getLongPath(path)).getBaseName(); + return PathFragment.create(WindowsFileOperations.getLongPath(path)).getBaseName(); } catch (IOException e) { return null; } @@ -523,7 +523,7 @@ public class WindowsFileSystem extends JavaIoFileSystem { } path = path.trim(); - PathFragment result = new PathFragment(path); + PathFragment result = PathFragment.create(path); if (path.isEmpty() || result.getDriveLetter() == '\0' || !result.isAbsolute()) { return null; } else { diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java index 0632baca01..e85325dcaa 100644 --- a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java +++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java @@ -76,7 +76,7 @@ public class WindowsSubprocessFactory implements Subprocess.Factory { // Therefore if it's absolute, then normalize it also. // If it's not absolute, then it cannot be longer than MAX_PATH, since MAX_PATH also limits the // length of file names. - PathFragment argv0fragment = new PathFragment(argv0); + PathFragment argv0fragment = PathFragment.create(argv0); return (argv0fragment.isAbsolute()) ? argv0fragment.normalize().getPathString().replace('/', '\\') : argv0; |