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;
   }