Support for enabling ListIterationRewriter without rewriting interfaces
This adds support for enabling the ListIterationRewriter in D8, without also enabling the potentially unsafe rewriting of iterator-based loops that are typed using List.
By setting -Dcom.android.tools.r8.enableListIterationRewriting=1 a safe variant is enabled that only handles loops over ArrayList and ImmutableList.
By setting -Dcom.android.tools.r8.enableListIterationRewriting=all the list iteration rewriting is enabled for all loops, except loops that are explicitly typed using LinkedList or CopyOnWriteArrayList.
Change-Id: Id5f1abd2ae1b0a4507808a42e1115dee9ecad746
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 622ff73..bd3cdcf 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.utils;
import static com.android.tools.r8.utils.AndroidApiLevel.B;
+import static com.android.tools.r8.utils.SystemPropertyUtils.isSystemPropertySet;
import static com.android.tools.r8.utils.SystemPropertyUtils.parseSystemPropertyForDevelopmentOrDefault;
import static com.android.tools.r8.utils.SystemPropertyUtils.parseSystemPropertyOrDefault;
@@ -2517,7 +2518,7 @@
"all".equals(System.getProperty("com.android.tools.r8.enableListIterationRewriting"));
// Used by unit tests.
public boolean listIterationRewritingRewriteCustomIterators =
- listIterationRewritingRewriteInterfaces;
+ isSystemPropertySet("com.android.tools.r8.enableListIterationRewriting");
// Testing flag to always generate D8 lambda accessors.
public boolean forceLambdaAccessorInD8 = false;
}