Compute max nameCount in NamingState#incrementAndGet()
This is a workaround for a bug that causes the nameCount of a naming state to be less than the nameCount of the corresponding parent naming state.
Bug: 127932803
Change-Id: I93d3ced4962861fdcf9ef9168e61341a173d62ec
diff --git a/src/main/java/com/android/tools/r8/naming/NamingState.java b/src/main/java/com/android/tools/r8/naming/NamingState.java
index 298144ef..4a4be05 100644
--- a/src/main/java/com/android/tools/r8/naming/NamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/NamingState.java
@@ -194,6 +194,17 @@
}
public int incrementAndGet() {
+ int parentNameCount = 0;
+ InternalState tmp = parentInternalState;
+ while (tmp != null) {
+ if (tmp.nameCount > parentNameCount) {
+ parentNameCount = tmp.nameCount;
+ }
+ tmp = tmp.parentInternalState;
+ }
+ if (parentNameCount > nameCount) {
+ nameCount = parentNameCount;
+ }
return nameCount++;
}
diff --git a/src/test/java/com/android/tools/r8/naming/FieldMinificationCollisionTest.java b/src/test/java/com/android/tools/r8/naming/FieldMinificationCollisionTest.java
index 1727bd6..7b89f71 100644
--- a/src/test/java/com/android/tools/r8/naming/FieldMinificationCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/naming/FieldMinificationCollisionTest.java
@@ -5,8 +5,8 @@
package com.android.tools.r8.naming;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotEquals;
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
@@ -42,8 +42,7 @@
FieldSubject f3Subject = inspector.clazz(C.class).uniqueFieldWithName("f3");
assertThat(f3Subject, isPresent());
- // TODO(b/127932803): f1 and f3 should not be given the same name.
- assertEquals(f1Subject.getFinalName(), f3Subject.getFinalName());
+ assertNotEquals(f1Subject.getFinalName(), f3Subject.getFinalName());
}
static class TestClass {