Fix usages of PathFragment segments that will become inefficient.
An upcoming replacement to PathFragment will not have efficient segment semantics, causing code to become unnecessarily inefficient.
RELNOTES: None
PiperOrigin-RevId: 182553098
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 ca12997..c37ffa3 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
@@ -1281,7 +1281,8 @@
for (OutputFile outputFile : rule.getOutputFiles()) {
targets.put(outputFile.getName(), outputFile);
PathFragment outputFileFragment = PathFragment.create(outputFile.getName());
- for (int i = 1; i < outputFileFragment.segmentCount(); i++) {
+ int segmentCount = outputFileFragment.segmentCount();
+ for (int i = 1; i < segmentCount; i++) {
String prefix = outputFileFragment.subFragment(0, i).toString();
outputFilePrefixes.putIfAbsent(prefix, outputFile);
}
@@ -1473,7 +1474,8 @@
// Check if a prefix of this output file matches an already existing one
PathFragment outputFileFragment = PathFragment.create(outputFileName);
- for (int i = 1; i < outputFileFragment.segmentCount(); i++) {
+ int segmentCount = outputFileFragment.segmentCount();
+ for (int i = 1; i < segmentCount; i++) {
String prefix = outputFileFragment.subFragment(0, i).toString();
if (outputFiles.containsKey(prefix)) {
throw conflictingOutputFile(outputFile, outputFiles.get(prefix));