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/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));
}
/**