Refactor all ctor callsites of PathFragment to instead call a static 'create' method.
This paves the way for changing PathFragment to e.g. an abstract class with multiple subclasses. This way we can split out the windows-specific stuff into one of these concrete classes, making the code more readable and also saving memory (since the shallow heap size of the NonWindowsPathFragment subclass will hopefully be smaller than that of the current PathFragment).
This also lets us pursue gc churn optimizations. We can now do interning in PathFragment#create and can also get rid of unnecessary intermediate PathFragment allocations.
RELNOTES: None
PiperOrigin-RevId: 152145768
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 16f926a..b5d6c1c 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 @@
}
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 c63fd5b..c4567d8 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 @@
@Override
public PathFragment getExecPath() {
- return new PathFragment(path);
+ return PathFragment.create(path);
}
@Override
@@ -170,7 +170,7 @@
* 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 a5b865f..7c6a870 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 @@
&& 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 3f2f360..ddeb001 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 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 404b0de..2a19d03 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 @@
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 @@
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 7c18968..036e747 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 @@
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 e38c3d9..ae8736c 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 @@
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 a54befb..3ebdd78 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 @@
* 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 @@
* 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 @@
* 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 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 @@
* <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 2ef4c2c..33c5d0a 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 @@
* 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 67dae4d..26eeadc 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 @@
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 ce1316f..664429e 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 @@
* 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 73cc667..2dd779f 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 @@
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 @@
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 2f21d85..2dbc228 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 @@
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 55cd813..2e245b4 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 @@
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 a25bc2c..76dc213 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 @@
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 @@
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 @@
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 46650d6..d26cd99 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 @@
* 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 d43a117..244e859 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 @@
// 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 0af26ec..c35db98 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 @@
}
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 deff590..7e382b2 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 @@
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 @@
"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 4965687..54eccb7 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 @@
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 @@
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 6373eb6..acf6f78 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 @@
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 @@
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 0c98f90..14b0537 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 @@
* 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 @@
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 5f39856..293091f 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 @@
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 a913927..e4b0262 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 @@
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 @@
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 @@
}
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 @@
}
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 0ae420a..40d8d0f 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 @@
// 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 @@
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 1d31f2e..4bc5a4c 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 @@
@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 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 5688a31..3c82f6c 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 @@
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 @@
? 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 @@
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 ae1fe70..b9564e7 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 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 @@
// 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 f599ef3..be3bcaa 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 @@
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 4099a8a..ec93068 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 @@
*/
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 f32d238..351f8c7 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 @@
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 @@
}
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 9a99031..0a29b9f 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 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 e55a4ed..d52db41 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 @@
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 @@
} 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 9de8f76..8d7ed33 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 @@
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 e4f7261..1556dcb14 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 @@
// 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 @@
// 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 @@
}
// 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 144dc89..b9be5a0 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 @@
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 37bc246..1324cce 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 @@
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 3ccbc1db..3060916 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 @@
// 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 @@
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 d8534ca..d12b3ac 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 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 e2fb0e4..23a9560 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 @@
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 89c61c2..0850fec 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 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 445716a..4352174 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 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 cd6182a..9f5500f 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 @@
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 55253a0..d3e3258 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 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 c917b5d..91a43c0 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 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 1f8b0b6..7326e17 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 @@
// 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 d690366..1821c4b 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 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 b5a8c5f..48783e6 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 @@
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 950c800..9b9ae31 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 @@
// 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 @@
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 e228852..e3b9b85 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 @@
// 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 e2c04b7..3d727ae 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 @@
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 248bcfd..83eb0ff 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 @@
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 73060ef..9cb154f 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 @@
* 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 b5b1183..d63b01d 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 @@
*/
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 30a5515..8e49f99 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 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 84b3c85..741ca59 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 @@
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 @@
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 2646692..2b7669f 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 @@
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 8b80179..ea0697c 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 @@
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 f658f67..843a72c 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 @@
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 @@
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 @@
// 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 @@
gccToolPath = tool.getPath();
linkerToolPath =
crosstoolTopPathFragment
- .getRelative(new PathFragment(tool.getPath()))
+ .getRelative(PathFragment.create(tool.getPath()))
.getPathString();
}
}
@@ -1181,7 +1181,7 @@
}
}
- 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 a94d10e..41afb81 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 @@
* 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 @@
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 bca504c..1acc9b4 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 @@
builder
.setPicMode(usePic)
.setOutputs(ruleContext, outputCategory, outputNameBase, generateDotd)
- .setTempOutputFile(new PathFragment(tempOutputName));
+ .setTempOutputFile(PathFragment.create(tempOutputName));
setupCompileBuildVariables(
builder,
@@ -969,7 +969,7 @@
}
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 @@
// 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 77e653c..9930e35 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 @@
* 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 @@
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 @@
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 @@
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 @@
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 @@
continue;
}
- importBuilder.put(key, new PathFragment(auxFile));
+ importBuilder.put(key, PathFragment.create(auxFile));
}
}
return importBuilder.build();
@@ -665,7 +665,7 @@
}
private static PathFragment getAutoProfileRootRelativePath(Path fdoProfile) {
- return new PathFragment(fdoProfile.getBaseName());
+ return PathFragment.create(fdoProfile.getBaseName());
}
@@ -674,7 +674,7 @@
}
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 9af100f..4fa0a82 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 @@
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 c2bca35..e524b1e 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 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 @@
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 db3569a..90de182 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 @@
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 e6bc558..60aa028 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 @@
* 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 95e1cc5..7adaea6 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 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 b5ab681..1712d02 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 @@
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 b115dee..fc44f09 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 @@
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 @@
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 6501b31..4006bc8 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 @@
}
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 6ec5120..dc9e9e8 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 @@
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 @@
* 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 @@
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 ab2bc95..9d0e3c2 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 @@
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 13bc0d9..39b05cb 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 @@
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 c085904..6532052 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 @@
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 f001f95..b2642f1 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 @@
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 ad52864..dcd8bca 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 @@
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 620010e..337ee96 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 @@
* 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 @@
* 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 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 ee9b83b..60bfec1 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 @@
// 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 @@
*/
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 451af68..2b14cca 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 @@
// 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 ad677f6..3480cfc 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 @@
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 4666590..03c2ae2 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 @@
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 455ee70..25058351 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 @@
// of dependers.
PathFragment rootRelativeOutputDir = ruleContext.getUniqueDirectory(UNIQUE_DIRECTORY_NAME);
- return new PathFragment(
+ return PathFragment.create(
buildConfiguration.getBinDirectory().getExecPath(), rootRelativeOutputDir);
}
@@ -562,10 +562,9 @@
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 54d8904..0a19cb1 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 @@
.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 @@
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 @@
// of dependers.
PathFragment rootRelativeOutputDir = ruleContext.getUniqueDirectory(UNIQUE_DIRECTORY_NAME);
- return new PathFragment(
+ return PathFragment.create(
ruleContext.getBinOrGenfilesDirectory().getExecPath(), rootRelativeOutputDir);
}
@@ -233,10 +232,9 @@
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 6ba9517..7f38142 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 @@
* 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 a343883..2036401 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 @@
}
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 @@
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 c2508c2..ebe030f 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 @@
* 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 @@
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 29efc78..64c4502 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 @@
}
} 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 @@
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 0b92f0a..51486ed 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 @@
} 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 19af038..c6040de 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 @@
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 8b7dea8..7f42c03 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 @@
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 da79635..5624b2b 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 @@
// 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 @@
* 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 01ea451..d6c4d45 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 @@
*/
// 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 @@
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 2e9e9de..833e011 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 @@
// 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 @@
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 3d3a9b0..4f738c7 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 @@
// 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 2eff7c4..0a649e9 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 @@
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 e30008e..26fd236 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 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 d8bb0a7..b6bd3c0 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 @@
// 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 @@
// 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 @@
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 11c78ae..a3c6768 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 @@
@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 f06be6b..aa91104 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 @@
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 f95274c..fe23f37 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 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 753f920..4874d89 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 @@
// 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 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 e134350..ae4b250 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 @@
@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 1941489..23eccce 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 @@
// 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 @@
// 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 32d1e90..7db3a2a 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 @@
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 8cc2d81..4160214 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 @@
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 @@
}
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 44d4a9b..9d28ee8 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 @@
@Override
public PathFragment asPathFragment() {
- return new PathFragment(importFile);
+ return PathFragment.create(importFile);
}
@Override
@@ -128,7 +128,7 @@
// 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 @@
@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 @@
@Override
public PathFragment asPathFragment() {
- return new PathFragment(importTarget);
+ return PathFragment.create(importTarget);
}
@Override
@@ -253,7 +253,7 @@
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 c21848a..c70420b 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 @@
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 5ad34d7..3013f3e 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 @@
@Override
public PathFragment convert(String input) {
- return new PathFragment(input);
+ return PathFragment.create(input);
}
@Override
@@ -155,7 +155,7 @@
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 d4eb7d7..8262c75 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 @@
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 bce290e..d77c1d7 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 @@
* 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 9cc3dc7..5b3bc1e 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 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 @@
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 @@
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 @@
* '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 @@
*/
@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 e409969..2512308 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 @@
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 e408841..ac8b756 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 @@
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 @@
} 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 @@
/** 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 @@
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 b466fc9..5a324be 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 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
return this;
}
- return new PathFragment(driveLetter, isAbsolute,
- subarray(scratchSegments, 0, segmentCount));
+ return createNoClone(driveLetter, isAbsolute, subarray(scratchSegments, 0, segmentCount));
}
/**
@@ -440,9 +458,9 @@
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 @@
* 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 @@
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 @@
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 @@
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 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 7e4a1f0..39aefd1 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 @@
}
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 7f7d8c7..764ed0d 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 @@
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 @@
*/
@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 d7ad308..353a684 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 @@
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 710319f..77197d7 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 @@
// 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 @@
}
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 0632bac..e85325d 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 @@
// 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;