Use index instead of iterator when cloning in field minification
Bug: 131382276
Change-Id: I201f7ac46bf3c40817835b64baf02770d4f73417
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
index d31d0bb..7916e8a 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNamingState.java
@@ -15,7 +15,7 @@
import com.android.tools.r8.naming.FieldNamingState.InternalState;
import com.android.tools.r8.utils.StringUtils;
import java.util.IdentityHashMap;
-import java.util.Iterator;
+import java.util.List;
import java.util.Map;
public class FieldNamingState extends FieldNamingStateBase<InternalState> implements Cloneable {
@@ -84,15 +84,15 @@
class InternalState implements Cloneable {
- private final Iterator<String> dictionaryIterator;
+ private int dictionaryIndex;
private int nextNameIndex;
public InternalState() {
- this(1, appView.options().getProguardConfiguration().getObfuscationDictionary().iterator());
+ this(1, 0);
}
- public InternalState(int nextNameIndex, Iterator<String> dictionaryIterator) {
- this.dictionaryIterator = dictionaryIterator;
+ public InternalState(int nextNameIndex, int dictionaryIndex) {
+ this.dictionaryIndex = dictionaryIndex;
this.nextNameIndex = nextNameIndex;
}
@@ -106,8 +106,10 @@
}
private DexString nextNameAccordingToStrategy(DexField field) {
- if (!strategy.bypassDictionary() && dictionaryIterator.hasNext()) {
- return appView.dexItemFactory().createString(dictionaryIterator.next());
+ List<String> dictionary =
+ appView.options().getProguardConfiguration().getObfuscationDictionary();
+ if (!strategy.bypassDictionary() && dictionaryIndex < dictionary.size()) {
+ return appView.dexItemFactory().createString(dictionary.get(dictionaryIndex++));
} else {
return strategy.next(field, this);
}
@@ -121,7 +123,7 @@
@Override
public InternalState clone() {
- return new InternalState(nextNameIndex, dictionaryIterator);
+ return new InternalState(nextNameIndex, dictionaryIndex);
}
}
}
diff --git a/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java b/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
index 4cfb22e..9cb616a 100644
--- a/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
+++ b/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
@@ -86,7 +86,6 @@
}
@Test
- @Ignore("b/131382276")
public void testInheritedNamingState()
throws IOException, CompilationFailedException, ExecutionException {
Path dictionary = temp.getRoot().toPath().resolve("dictionary.txt");