Fix interning in PathFragment.create(char, bool, String[])
--
MOS_MIGRATED_REVID=125721556
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 f856cb8..9d65922 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
@@ -87,7 +87,7 @@
for (int i = 0; i < segments.length; i++) {
internedSegments[i] = StringCanonicalizer.intern(segments[i]);
}
- return new PathFragment(driveLetter, isAbsolute, segments);
+ return new PathFragment(driveLetter, isAbsolute, internedSegments);
}
// We have 3 word-sized fields (segments, hashCode and path), and 2
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java
index 26e15cb..ac34ec0 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java
@@ -49,6 +49,22 @@
}
@Test
+ public void testCreateInternsPathFragments() {
+ String[] firstSegments = new String[] {"hello", "world"};
+ PathFragment first = PathFragment.create(
+ /*driveLetter=*/ '\0', /*isAbsolute=*/ false, firstSegments);
+
+ String[] secondSegments = new String[] {new String("hello"), new String("world")};
+ PathFragment second = PathFragment.create(
+ /*driveLetter=*/ '\0', /*isAbsolute=*/ false, secondSegments);
+
+ assertThat(first.segmentCount()).isEqualTo(second.segmentCount());
+ for (int i = 0; i < first.segmentCount(); i++) {
+ assertThat(first.getSegment(i)).isSameAs(second.getSegment(i));
+ }
+ }
+
+ @Test
public void testEqualsAndHashCode() {
InMemoryFileSystem filesystem = new InMemoryFileSystem();
@@ -225,7 +241,7 @@
assertEquals(fooBarAbs,
new PathFragment("/foo/bar/..").getParentDirectory());
}
-
+
@Test
public void testSegmentsCount() {
assertEquals(2, new PathFragment("foo/bar").segmentCount());
@@ -505,7 +521,7 @@
assertEquals(".", PathFragment.EMPTY_FRAGMENT.getSafePathString());
assertEquals("abc/def", new PathFragment("abc/def").getSafePathString());
}
-
+
@Test
public void testNormalize() {
assertEquals(new PathFragment("/a/b"), new PathFragment("/a/b").normalize());