diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index d265881..1c1e02a 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.3.23";
+  public static final String LABEL = "1.3.24";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java b/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java
index 5dcc7b8..ba7963b 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java
@@ -151,8 +151,8 @@
   MemberNaming lookupByOriginalItem(DexField field) {
     for (Map.Entry<FieldSignature, MemberNaming> entry : fieldMembers.entrySet()) {
       FieldSignature signature = entry.getKey();
-      if (signature.name.equals(field.name.toString())
-          && signature.type.equals(field.type.getName())) {
+      if (signature.name.equals(field.name.toSourceString())
+          && signature.type.equals(field.type.toSourceString())) {
         return entry.getValue();
       }
     }
@@ -162,11 +162,11 @@
   protected MemberNaming lookupByOriginalItem(DexMethod method) {
     for (Map.Entry<MethodSignature, MemberNaming> entry : methodMembers.entrySet()) {
       MethodSignature signature = entry.getKey();
-      if (signature.name.equals(method.name.toString())
-          && signature.type.equals(method.proto.returnType.toString())
+      if (signature.name.equals(method.name.toSourceString())
+          && signature.type.equals(method.proto.returnType.toSourceString())
           && Arrays.equals(signature.parameters,
               Arrays.stream(method.proto.parameters.values)
-                  .map(DexType::toString).toArray(String[]::new))) {
+                  .map(DexType::toSourceString).toArray(String[]::new))) {
         return entry.getValue();
       }
     }
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapApplier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapApplier.java
index f114a7e..3fb07fe 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapApplier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapApplier.java
@@ -22,8 +22,8 @@
 import com.android.tools.r8.utils.ArrayUtils;
 import com.android.tools.r8.utils.ThrowingConsumer;
 import com.android.tools.r8.utils.Timing;
-import com.google.common.collect.Sets;
 import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
+import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.Map;
 import java.util.Set;
@@ -128,42 +128,80 @@
 
     private void applyMemberMapping(DexType from, ChainedClassNaming classNaming) {
       DexClass clazz = appInfo.definitionFor(from);
-      if (clazz == null) return;
+      if (clazz == null) {
+        return;
+      }
 
-      final Set<MemberNaming> appliedMemberNaming = Sets.newIdentityHashSet();
+      // We regard mappings as _complete_ if they cover literally everything, but that's too ideal.
+      // When visiting members with member mappings, obviously, there are two incomplete cases:
+      // no matched member or no matched mapping.
+      //
+      // 1. No matched member
+      // class A { // : X
+      //   void foo(); // : a
+      // }
+      //
+      // class B extends A { // : Y
+      //   @Override void foo(); // no mapping
+      // }
+      //
+      // For this case, we have chained class naming and move upward to search for super class's
+      // member mapping. One corner case we should be careful here is to resolve on the correct
+      // mapping, e.g.,
+      //
+      // class B extends A { // : Y
+      //   private void foo(); // no mapping, should be not renamed to a
+      // }
+
+      final Set<MemberNaming.Signature> appliedMemberSignature = new HashSet<>();
       clazz.forEachField(encodedField -> {
         MemberNaming memberNaming = classNaming.lookupByOriginalItem(encodedField.field);
         if (memberNaming != null) {
-          appliedMemberNaming.add(memberNaming);
+          appliedMemberSignature.add(memberNaming.getOriginalSignature());
           applyFieldMapping(encodedField.field, memberNaming);
         }
       });
 
       clazz.forEachMethod(encodedMethod -> {
-        MemberNaming memberNaming = classNaming.lookupByOriginalItem(encodedMethod.method);
+        MemberNaming memberNaming =
+            classNaming.lookupByOriginalItem(encodedMethod.method, encodedMethod.isPrivateMethod());
         if (memberNaming != null) {
-          appliedMemberNaming.add(memberNaming);
+          appliedMemberSignature.add(memberNaming.getOriginalSignature());
           applyMethodMapping(encodedMethod.method, memberNaming);
         }
       });
 
+      // 2. No matched mapping
+      // class A { // : X
+      //   void foo(); // : a
+      // }
+      //
+      // class B extends A { // : Y
+      //   // no overriding, but has mapping: void foo() -> a
+      // }
+      //
       // We need to handle a class that extends another class where some members are not overridden,
       // resulting in absence of definitions. References to those members need to be redirected via
       // the lense as well.
+      // The caveat is, since such members don't exist, we pretend to see their definitions.
+      // We should ensure that they indeed don't exist. Otherwise, legitimately different members,
+      // e.g., private methods with same names, could be mapped to a wrong renamed name.
       classNaming.forAllFieldNaming(memberNaming -> {
-        if (!appliedMemberNaming.contains(memberNaming)) {
-          DexField pretendedOriginalField =
-              ((FieldSignature) memberNaming.getOriginalSignature())
-                  .toDexField(appInfo.dexItemFactory, from);
-          applyFieldMapping(pretendedOriginalField, memberNaming);
+        FieldSignature signature = (FieldSignature) memberNaming.getOriginalSignature();
+        if (!appliedMemberSignature.contains(signature)) {
+          DexField pretendedOriginalField = signature.toDexField(appInfo.dexItemFactory, from);
+          if (appInfo.definitionFor(pretendedOriginalField) == null) {
+            applyFieldMapping(pretendedOriginalField, memberNaming);
+          }
         }
       });
       classNaming.forAllMethodNaming(memberNaming -> {
-        if (!appliedMemberNaming.contains(memberNaming)) {
-          DexMethod pretendedOriginalMethod =
-              ((MethodSignature) memberNaming.getOriginalSignature())
-                  .toDexMethod(appInfo.dexItemFactory, from);
-          applyMethodMapping(pretendedOriginalMethod, memberNaming);
+        MethodSignature signature = (MethodSignature) memberNaming.getOriginalSignature();
+        if (!appliedMemberSignature.contains(signature)) {
+          DexMethod pretendedOriginalMethod = signature.toDexMethod(appInfo.dexItemFactory, from);
+          if (appInfo.definitionFor(pretendedOriginalMethod) == null) {
+            applyMethodMapping(pretendedOriginalMethod, memberNaming);
+          }
         }
       });
     }
@@ -229,6 +267,15 @@
       }
     }
 
+    protected MemberNaming lookupByOriginalItem(DexMethod method, boolean isPrivate) {
+      // If the current method is overridable, use chained mappings.
+      if (!isPrivate) {
+        return lookupByOriginalItem(method);
+      }
+      // Otherwise, just look up the current class's mappings only.
+      return super.lookupByOriginalItem(method);
+    }
+
     @Override
     protected MemberNaming lookupByOriginalItem(DexMethod method) {
       MemberNaming memberNaming = super.lookupByOriginalItem(method);
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapError.java b/src/main/java/com/android/tools/r8/naming/ProguardMapError.java
index ce659e1..684c79b 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapError.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapError.java
@@ -19,20 +19,20 @@
 
   static ProguardMapError keptTypeWasRenamed(DexType type, String keptName, String rename) {
     return new ProguardMapError(
-        "Warning: " + type + createMessageForConflict(keptName, rename));
+        type + createMessageForConflict(keptName, rename));
   }
 
   static ProguardMapError keptMethodWasRenamed(DexMethod method, String keptName, String rename) {
     return new ProguardMapError(
-        "Warning: " + method.toSourceString() + createMessageForConflict(keptName, rename));
+        method.toSourceString() + createMessageForConflict(keptName, rename));
   }
 
   static ProguardMapError keptFieldWasRenamed(DexField field, String keptName, String rename) {
     return new ProguardMapError(
-        "Warning: " + field.toSourceString() + createMessageForConflict(keptName, rename));
+        field.toSourceString() + createMessageForConflict(keptName, rename));
   }
 
   private static String createMessageForConflict(String keptName, String rename) {
-    return " is not being kept as '" + keptName + "', but remapped to '" + rename + "'";
+    return " is not being kept as " + keptName + ", but remapped to " + rename;
   }
 }
diff --git a/src/test/java/com/android/tools/r8/JctfTestSpecifications.java b/src/test/java/com/android/tools/r8/JctfTestSpecifications.java
index f734ab8..7e3be90 100644
--- a/src/test/java/com/android/tools/r8/JctfTestSpecifications.java
+++ b/src/test/java/com/android/tools/r8/JctfTestSpecifications.java
@@ -7,98 +7,104 @@
 import static com.android.tools.r8.TestCondition.R8_COMPILER;
 import static com.android.tools.r8.TestCondition.and;
 import static com.android.tools.r8.TestCondition.any;
+import static com.android.tools.r8.TestCondition.anyDexVm;
+import static com.android.tools.r8.TestCondition.artRuntimesFromAndJava;
+import static com.android.tools.r8.TestCondition.artRuntimesUpToAndJava;
 import static com.android.tools.r8.TestCondition.match;
 import static com.android.tools.r8.TestCondition.runtimes;
-import static com.android.tools.r8.TestCondition.runtimesFrom;
-import static com.android.tools.r8.TestCondition.runtimesUpTo;
 
 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
 import com.android.tools.r8.R8RunArtTestsTest.DexTool;
-import com.android.tools.r8.ToolHelper.DexVm;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.TestCondition.Runtime;
 import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
 import java.util.Collection;
+import java.util.Set;
 import java.util.function.BiFunction;
 
 public class JctfTestSpecifications {
 
   public enum Outcome {
     PASSES,
-    FAILS_WITH_ART,
-    TIMEOUTS_WITH_ART,
-    FLAKY_WITH_ART
+    FAILS_WHEN_RUN,
+    TIMEOUTS_WHEN_RUN,
+    FLAKY_WHEN_RUN
   }
 
   public static final Multimap<String, TestCondition> failuresToTriage =
       new ImmutableListMultimap.Builder<String, TestCondition>()
-          .put("math.BigInteger.nextProbablePrime.BigInteger_nextProbablePrime_A02", any())
+          .put("math.BigInteger.nextProbablePrime.BigInteger_nextProbablePrime_A02", anyDexVm())
           .put("math.BigInteger.ConstructorLjava_lang_String.BigInteger_Constructor_A02", any())
           .put(
               "lang.StringBuffer.insertILjava_lang_Object.StringBuffer_insert_A01",
-              match(runtimes(Version.DEFAULT)))
-          .put("lang.StringBuffer.serialization.StringBuffer_serialization_A01", any())
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.JAVA)))
+          .put("lang.StringBuffer.serialization.StringBuffer_serialization_A01", anyDexVm())
           .put(
               "lang.CloneNotSupportedException.serialization.CloneNotSupportedException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.NumberFormatException.serialization.NumberFormatException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.StrictMath.roundF.StrictMath_round_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0)))
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.ART_V7_0_0, Runtime.JAVA)))
           .put(
               "lang.StrictMath.roundD.StrictMath_round_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0)))
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.ART_V7_0_0, Runtime.JAVA)))
           .put("lang.StrictMath.atan2DD.StrictMath_atan2_A01", any())
           .put("lang.Thread.stop.Thread_stop_A05", any())
-          .put("lang.Thread.resume.Thread_resume_A02", any())
-          .put("lang.Thread.suspend.Thread_suspend_A02", any())
+          .put("lang.Thread.resume.Thread_resume_A02", anyDexVm())
+          .put("lang.Thread.suspend.Thread_suspend_A02", anyDexVm())
           .put("lang.Thread.stop.Thread_stop_A03", any())
           .put("lang.Thread.interrupt.Thread_interrupt_A03", any())
           .put("lang.Thread.stop.Thread_stop_A04", any())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_StringJ.Thread_Constructor_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1)))
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.ART_V7_0_0, Runtime.ART_V6_0_1)))
           .put(
               "lang.Thread.getUncaughtExceptionHandler.Thread_getUncaughtExceptionHandler_A01",
-              any())
-          .put("lang.Thread.getStackTrace.Thread_getStackTrace_A02", any())
-          .put("lang.Thread.enumerate_Ljava_lang_Thread.Thread_enumerate_A02", any())
+              anyDexVm())
+          .put("lang.Thread.getStackTrace.Thread_getStackTrace_A02", anyDexVm())
+          .put("lang.Thread.enumerate_Ljava_lang_Thread.Thread_enumerate_A02", anyDexVm())
           .put("lang.Thread.countStackFrames.Thread_countStackFrames_A01", any())
           .put(
               "lang.Thread.getAllStackTraces.Thread_getAllStackTraces_A01",
-              match(runtimes(Version.V7_0_0)))
-          .put("lang.Thread.destroy.Thread_destroy_A01", match(runtimesFrom(Version.V4_4_4)))
-          .put("lang.Thread.isAlive.Thread_isAlive_A01", any())
+              match(runtimes(Runtime.ART_V7_0_0)))
+          .put(
+              "lang.Thread.destroy.Thread_destroy_A01",
+              match(TestCondition.artRuntimesFrom(Runtime.ART_V4_4_4)))
+          .put("lang.Thread.isAlive.Thread_isAlive_A01", anyDexVm())
           .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A04", any())
           .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A03", any())
           .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A05", any())
-          .put("lang.Thread.getPriority.Thread_getPriority_A01", any())
+          .put("lang.Thread.getPriority.Thread_getPriority_A01", anyDexVm())
           .put(
               "lang.Thread.getContextClassLoader.Thread_getContextClassLoader_A03",
-              match(runtimes(Version.V7_0_0)))
-          .put("lang.OutOfMemoryError.serialization.OutOfMemoryError_serialization_A01", any())
+              match(runtimes(Runtime.ART_V7_0_0)))
+          .put("lang.OutOfMemoryError.serialization.OutOfMemoryError_serialization_A01", anyDexVm())
           .put(
               "lang.RuntimePermission.ConstructorLjava_lang_StringLjava_lang_String.RuntimePermission_Constructor_A01",
-              any())
-          .put("lang.RuntimePermission.serialization.RuntimePermission_serialization_A01", any())
+              anyDexVm())
+          .put(
+              "lang.RuntimePermission.serialization.RuntimePermission_serialization_A01",
+              anyDexVm())
           .put(
               "lang.RuntimePermission.ConstructorLjava_lang_StringLjava_lang_String.RuntimePermission_Constructor_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.RuntimePermission.ConstructorLjava_lang_StringLjava_lang_String.RuntimePermission_Constructor_A03",
-              any())
+              anyDexVm())
           .put("lang.RuntimePermission.Class.RuntimePermission_class_A17", any())
           .put(
               "lang.RuntimePermission.ConstructorLjava_lang_String.RuntimePermission_Constructor_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.RuntimePermission.ConstructorLjava_lang_String.RuntimePermission_Constructor_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.RuntimePermission.ConstructorLjava_lang_String.RuntimePermission_Constructor_A01",
-              any())
+              anyDexVm())
           .put("lang.RuntimePermission.Class.RuntimePermission_class_A26", any())
           .put("lang.RuntimePermission.Class.RuntimePermission_class_A04", any())
           .put("lang.RuntimePermission.Class.RuntimePermission_class_A03", any())
@@ -123,474 +129,615 @@
           .put("lang.RuntimePermission.Class.RuntimePermission_class_A01", any())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A06",
-              any())
+              anyDexVm())
           .put("lang.RuntimePermission.Class.RuntimePermission_class_A14", any())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A05",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A04",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BII.ClassLoader_defineClass_A07",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.setPackageAssertionStatusLjava_lang_StringZ.ClassLoader_setPackageAssertionStatus_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.setPackageAssertionStatusLjava_lang_StringZ.ClassLoader_setPackageAssertionStatus_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.setPackageAssertionStatusLjava_lang_StringZ.ClassLoader_setPackageAssertionStatus_A03",
-              any())
-          .put("lang.ClassLoader.loadClassLjava_lang_StringZ.ClassLoader_loadClass_A03", any())
-          .put("lang.ClassLoader.loadClassLjava_lang_StringZ.ClassLoader_loadClass_A01", any())
-          .put("lang.ClassLoader.loadClassLjava_lang_StringZ.ClassLoader_loadClass_A04", any())
+              anyDexVm())
+          .put("lang.ClassLoader.loadClassLjava_lang_StringZ.ClassLoader_loadClass_A03", anyDexVm())
+          .put("lang.ClassLoader.loadClassLjava_lang_StringZ.ClassLoader_loadClass_A01", anyDexVm())
+          .put("lang.ClassLoader.loadClassLjava_lang_StringZ.ClassLoader_loadClass_A04", anyDexVm())
           .put(
               "lang.ClassLoader.definePackageLjava_lang_String6Ljava_net_URL.ClassLoader_definePackage_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.definePackageLjava_lang_String6Ljava_net_URL.ClassLoader_definePackage_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.definePackageLjava_lang_String6Ljava_net_URL.ClassLoader_definePackage_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A05",
-              any())
-          .put("lang.ClassLoader.getResourceLjava_lang_String.ClassLoader_getResource_A01", any())
+              anyDexVm())
+          .put(
+              "lang.ClassLoader.getResourceLjava_lang_String.ClassLoader_getResource_A01",
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A06",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A07",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0)))
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.ART_V7_0_0)))
           .put(
               "lang.ClassLoader.defineClassLjava_lang_StringLjava_nio_ByteBufferLjava_security_ProtectionDomain.ClassLoader_defineClass_A04",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.setSignersLjava_lang_Class_Ljava_lang_Object.ClassLoader_setSigners_A01",
-              any())
-          .put("lang.ClassLoader.clearAssertionStatus.ClassLoader_clearAssertionStatus_A01", any())
-          .put("lang.ClassLoader.Constructor.ClassLoader_Constructor_A02", any())
+              anyDexVm())
+          .put(
+              "lang.ClassLoader.clearAssertionStatus.ClassLoader_clearAssertionStatus_A01",
+              anyDexVm())
+          .put("lang.ClassLoader.Constructor.ClassLoader_Constructor_A02", anyDexVm())
           .put(
               "lang.ClassLoader.getSystemResourceLjava_lang_String.ClassLoader_getSystemResource_A01",
-              any())
-          .put("lang.ClassLoader.getResourcesLjava_lang_String.ClassLoader_getResources_A01", any())
-          .put("lang.ClassLoader.resolveClassLjava_lang_Class.ClassLoader_resolveClass_A02", any())
+              anyDexVm())
+          .put(
+              "lang.ClassLoader.getResourcesLjava_lang_String.ClassLoader_getResources_A01",
+              anyDexVm())
+          .put(
+              "lang.ClassLoader.resolveClassLjava_lang_Class.ClassLoader_resolveClass_A02",
+              anyDexVm())
           .put(
               "lang.ClassLoader.getResourceAsStreamLjava_lang_String.ClassLoader_getResourceAsStream_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.findLoadedClassLjava_lang_String.ClassLoader_findLoadedClass_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A02",
-              any())
-          .put("lang.ClassLoader.resolveClassLjava_lang_Class.ClassLoader_resolveClass_A01", any())
+              anyDexVm())
+          .put(
+              "lang.ClassLoader.resolveClassLjava_lang_Class.ClassLoader_resolveClass_A01",
+              anyDexVm())
           .put(
               "lang.ClassLoader.setDefaultAssertionStatusZ.ClassLoader_setDefaultAssertionStatus_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A05",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A06",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A08",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.getSystemResourcesLjava_lang_String.ClassLoader_getSystemResources_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A07",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A09",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.defineClassLjava_lang_String_BIILjava_security_ProtectionDomain.ClassLoader_defineClass_A04",
-              any())
-          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A02", any())
+              anyDexVm())
+          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A02", anyDexVm())
           .put(
               "lang.ClassLoader.getSystemResourceAsStreamLjava_lang_String.ClassLoader_getSystemResourceAsStream_A01",
-              any())
-          .put("lang.ClassLoader.getPackages.ClassLoader_getPackages_A01", any())
+              anyDexVm())
+          .put("lang.ClassLoader.getPackages.ClassLoader_getPackages_A01", anyDexVm())
           .put(
               "lang.ClassLoader.setClassAssertionStatusLjava_lang_StringZ.ClassLoader_setClassAssertionStatus_A01",
               any())
-          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A03", any())
-          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A01", any())
-          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A04", any())
-          .put("lang.ClassLoader.getParent.ClassLoader_getParent_A01", any())
+          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A03", anyDexVm())
+          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A01", anyDexVm())
+          .put("lang.ClassLoader.defineClass_BII.ClassLoader_defineClass_A04", anyDexVm())
+          .put("lang.ClassLoader.getParent.ClassLoader_getParent_A01", anyDexVm())
           .put(
               "lang.ClassLoader.setClassAssertionStatusLjava_lang_StringZ.ClassLoader_setClassAssertionStatus_A04",
               any())
           .put(
               "lang.ClassLoader.setClassAssertionStatusLjava_lang_StringZ.ClassLoader_setClassAssertionStatus_A02",
-              any())
-          .put("lang.ClassLoader.getParent.ClassLoader_getParent_A02", any())
-          .put("lang.ClassLoader.getSystemClassLoader.ClassLoader_getSystemClassLoader_A02", any())
+              anyDexVm())
+          .put("lang.ClassLoader.getParent.ClassLoader_getParent_A02", anyDexVm())
+          .put(
+              "lang.ClassLoader.getSystemClassLoader.ClassLoader_getSystemClassLoader_A02",
+              anyDexVm())
           .put(
               "lang.ClassLoader.ConstructorLjava_lang_ClassLoader.ClassLoader_Constructor_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.ClassLoader.findSystemClassLjava_lang_String.ClassLoader_findSystemClass_A04",
-              any())
-          .put("lang.ClassLoader.getPackageLjava_lang_String.ClassLoader_getPackage_A01", any())
+              anyDexVm())
+          .put(
+              "lang.ClassLoader.getPackageLjava_lang_String.ClassLoader_getPackage_A01", anyDexVm())
           .put(
               "lang.NoClassDefFoundError.serialization.NoClassDefFoundError_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.TypeNotPresentException.serialization.TypeNotPresentException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.IndexOutOfBoundsException.serialization.IndexOutOfBoundsException_serialization_A01",
-              any())
-          .put("lang.Enum.serialization.Enum_serialization_A01", any())
-          .put("lang.Enum.ConstructorLjava_lang_StringI.Enum_Constructor_A01", any())
-          .put("lang.InternalError.serialization.InternalError_serialization_A01", any())
-          .put("lang.Error.serialization.Error_serialization_A01", any())
+              anyDexVm())
+          .put("lang.Enum.serialization.Enum_serialization_A01", anyDexVm())
+          .put("lang.Enum.ConstructorLjava_lang_StringI.Enum_Constructor_A01", anyDexVm())
+          .put("lang.InternalError.serialization.InternalError_serialization_A01", anyDexVm())
+          .put("lang.Error.serialization.Error_serialization_A01", anyDexVm())
           .put("lang.Runtime.loadLjava_lang_String.Runtime_load_A02", any())
           .put("lang.Runtime.loadLjava_lang_String.Runtime_load_A05", any())
           .put("lang.Runtime.loadLjava_lang_String.Runtime_load_A03", any())
           .put("lang.Runtime.loadLjava_lang_String.Runtime_load_A04", any())
-          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A02", any())
-          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A03", any())
-          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A01", any())
+          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A02", anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A03", anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A01", anyDexVm())
           .put("lang.Runtime.loadLibraryLjava_lang_String.Runtime_loadLibrary_A04", any())
           .put("lang.Runtime.loadLibraryLjava_lang_String.Runtime_loadLibrary_A05", any())
           .put("lang.Runtime.loadLibraryLjava_lang_String.Runtime_loadLibrary_A03", any())
-          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A02", any())
-          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A03", any())
+          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A02", anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A03", anyDexVm())
           .put("lang.Runtime.loadLibraryLjava_lang_String.Runtime_loadLibrary_A02", any())
-          .put("lang.Runtime.traceMethodCallsZ.Runtime_traceMethodCalls_A01", any())
-          .put("lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A01", any())
-          .put("lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A08", any())
-          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A01", any())
-          .put("lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A03", any())
-          .put("lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A07", any())
-          .put("lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A05", any())
-          .put("lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A06", any())
-          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A03", any())
-          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A02", any())
-          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A01", any())
+          .put("lang.Runtime.traceMethodCallsZ.Runtime_traceMethodCalls_A01", anyDexVm())
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A01",
+              anyDexVm())
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A08",
+              anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A01", anyDexVm())
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A03",
+              anyDexVm())
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A07",
+              anyDexVm())
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A05",
+              anyDexVm())
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A06",
+              anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A03", anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A02", anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A01", anyDexVm())
           .put(
               "lang.Runtime.removeShutdownHookLjava_lang_Thread.Runtime_removeShutdownHook_A02",
-              any())
-          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A01", any())
+              anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A01", anyDexVm())
           .put(
               "lang.Runtime.removeShutdownHookLjava_lang_Thread.Runtime_removeShutdownHook_A01",
-              any())
-          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A02", any())
+              anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A02", anyDexVm())
           .put(
               "lang.Runtime.removeShutdownHookLjava_lang_Thread.Runtime_removeShutdownHook_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.Runtime.exec_Ljava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A01",
-              any())
-          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A03", any())
+              anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A03", anyDexVm())
           .put(
               "lang.Runtime.exec_Ljava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A02",
-              any())
+              anyDexVm())
           .put("lang.Runtime.haltI.Runtime_halt_A02", any())
           .put(
               "lang.Runtime.exec_Ljava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A03",
-              any())
+              anyDexVm())
           .put("lang.Runtime.haltI.Runtime_halt_A03", any())
-          .put("lang.Runtime.runFinalizersOnExitZ.Runtime_runFinalizersOnExit_A01", any())
+          .put("lang.Runtime.runFinalizersOnExitZ.Runtime_runFinalizersOnExit_A01", anyDexVm())
           .put("lang.Runtime.haltI.Runtime_halt_A01", any())
-          .put("lang.Runtime.runFinalizersOnExitZ.Runtime_runFinalizersOnExit_A03", any())
+          .put("lang.Runtime.runFinalizersOnExitZ.Runtime_runFinalizersOnExit_A03", anyDexVm())
           .put(
               "lang.Runtime.execLjava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.Runtime.execLjava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A01",
-              any())
-          .put("lang.Runtime.runFinalizersOnExitZ.Runtime_runFinalizersOnExit_A02", any())
+              anyDexVm())
+          .put("lang.Runtime.runFinalizersOnExitZ.Runtime_runFinalizersOnExit_A02", anyDexVm())
           .put("lang.Runtime.exitI.Runtime_exit_A03", any())
           .put(
               "lang.Runtime.execLjava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A02",
-              any())
+              anyDexVm())
           .put("lang.Runtime.exitI.Runtime_exit_A04", any())
           .put(
               "lang.NoSuchMethodException.serialization.NoSuchMethodException_serialization_A01",
-              any())
+              anyDexVm())
           .put("lang.Runtime.exitI.Runtime_exit_A01", any())
           .put("lang.Runtime.exitI.Runtime_exit_A02", any())
           .put(
               "lang.InstantiationException.serialization.InstantiationException_serialization_A01",
-              any())
-          .put("lang.Exception.serialization.Exception_serialization_A01", any())
-          .put("lang.StackOverflowError.serialization.StackOverflowError_serialization_A01", any())
+              anyDexVm())
+          .put("lang.Exception.serialization.Exception_serialization_A01", anyDexVm())
+          .put(
+              "lang.StackOverflowError.serialization.StackOverflowError_serialization_A01",
+              anyDexVm())
           .put(
               "lang.NoSuchFieldException.serialization.NoSuchFieldException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.NegativeArraySizeException.serialization.NegativeArraySizeException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ArrayIndexOutOfBoundsException.serialization.ArrayIndexOutOfBoundsException_serialization_A01",
-              any())
-          .put("lang.VerifyError.serialization.VerifyError_serialization_A01", any())
+              anyDexVm())
+          .put("lang.VerifyError.serialization.VerifyError_serialization_A01", anyDexVm())
           .put(
               "lang.IllegalArgumentException.serialization.IllegalArgumentException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.IllegalStateException.serialization.IllegalStateException_serialization_A01",
-              any())
-          .put("lang.Double.serialization.Double_serialization_A01", any())
+              anyDexVm())
+          .put("lang.Double.serialization.Double_serialization_A01", anyDexVm())
           .put("lang.Double.toStringD.Double_toString_A05", any())
           .put(
-              "lang.ArithmeticException.serialization.ArithmeticException_serialization_A01", any())
+              "lang.ArithmeticException.serialization.ArithmeticException_serialization_A01",
+              anyDexVm())
           .put(
               "lang.ExceptionInInitializerError.serialization.ExceptionInInitializerError_serialization_A01",
-              any())
-          .put("lang.ThreadLocal.Class.ThreadLocal_class_A01", any())
-          .put("lang.Byte.serialization.Byte_serialization_A01", any())
+              anyDexVm())
+          .put("lang.ThreadLocal.Class.ThreadLocal_class_A01", anyDexVm())
+          .put("lang.Byte.serialization.Byte_serialization_A01", anyDexVm())
           .put(
               "lang.Byte.parseByteLjava_lang_StringI.Byte_parseByte_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Byte.valueOfLjava_lang_StringI.Byte_valueOf_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Byte.valueOfLjava_lang_String.Byte_ValueOf_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Byte.decodeLjava_lang_String.Byte_decode_A04",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
-          .put("lang.LinkageError.serialization.LinkageError_serialization_A01", any())
-          .put("lang.ClassCastException.serialization.ClassCastException_serialization_A01", any())
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
+          .put("lang.LinkageError.serialization.LinkageError_serialization_A01", anyDexVm())
+          .put(
+              "lang.ClassCastException.serialization.ClassCastException_serialization_A01",
+              anyDexVm())
           .put(
               "lang.Byte.ConstructorLjava_lang_String.Byte_Constructor_A02",
               match(
                   runtimes(
-                      DexVm.Version.DEFAULT,
-                      DexVm.Version.V7_0_0,
-                      DexVm.Version.V6_0_1,
-                      DexVm.Version.V5_1_1)))
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Byte.parseByteLjava_lang_String.Byte_parseByte_A02",
               match(
                   runtimes(
-                      DexVm.Version.DEFAULT,
-                      DexVm.Version.V7_0_0,
-                      DexVm.Version.V6_0_1,
-                      DexVm.Version.V5_1_1)))
-          .put("lang.NoSuchFieldError.serialization.NoSuchFieldError_serialization_A01", any())
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
+          .put("lang.NoSuchFieldError.serialization.NoSuchFieldError_serialization_A01", anyDexVm())
           .put(
               "lang.UnsupportedOperationException.serialization.UnsupportedOperationException_serialization_A01",
-              any())
-          .put("lang.NoSuchMethodError.serialization.NoSuchMethodError_serialization_A01", any())
+              anyDexVm())
+          .put(
+              "lang.NoSuchMethodError.serialization.NoSuchMethodError_serialization_A01",
+              anyDexVm())
           .put(
               "lang.IllegalMonitorStateException.serialization.IllegalMonitorStateException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.StringIndexOutOfBoundsException.serialization.StringIndexOutOfBoundsException_serialization_A01",
-              any())
-          .put("lang.SecurityException.serialization.SecurityException_serialization_A01", any())
-          .put("lang.IllegalAccessError.serialization.IllegalAccessError_serialization_A01", any())
+              anyDexVm())
           .put(
-              "lang.ArrayStoreException.serialization.ArrayStoreException_serialization_A01", any())
-          .put("lang.UnknownError.serialization.UnknownError_serialization_A01", any())
-          .put("lang.Boolean.serialization.Boolean_serialization_A01", any())
+              "lang.SecurityException.serialization.SecurityException_serialization_A01",
+              anyDexVm())
+          .put(
+              "lang.IllegalAccessError.serialization.IllegalAccessError_serialization_A01",
+              anyDexVm())
+          .put(
+              "lang.ArrayStoreException.serialization.ArrayStoreException_serialization_A01",
+              anyDexVm())
+          .put("lang.UnknownError.serialization.UnknownError_serialization_A01", anyDexVm())
+          .put("lang.Boolean.serialization.Boolean_serialization_A01", anyDexVm())
           .put(
               "lang.Integer.valueOfLjava_lang_StringI.Integer_valueOf_A02",
               match(
                   runtimes(
-                      DexVm.Version.DEFAULT,
-                      DexVm.Version.V7_0_0,
-                      Version.V6_0_1,
-                      DexVm.Version.V5_1_1)))
-          .put("lang.Integer.serialization.Integer_serialization_A01", any())
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
+          .put("lang.Integer.serialization.Integer_serialization_A01", anyDexVm())
           .put(
               "lang.Integer.parseIntLjava_lang_String.Integer_parseInt_A02",
               match(
                   runtimes(
-                      Version.DEFAULT,
-                      DexVm.Version.V7_0_0,
-                      DexVm.Version.V6_0_1,
-                      DexVm.Version.V5_1_1)))
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.getIntegerLjava_lang_StringI.Integer_getInteger_A02",
               match(
-                  runtimes(Version.DEFAULT, DexVm.Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.valueOfLjava_lang_String.Integer_valueOf_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.decodeLjava_lang_String.Integer_decode_A04",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.parseIntLjava_lang_StringI.Integer_parseInt_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.getIntegerLjava_lang_StringLjava_lang_Integer.Integer_getInteger_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.ConstructorLjava_lang_String.Integer_Constructor_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.Integer.getIntegerLjava_lang_String.Integer_getInteger_A02",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.ref.PhantomReference.isEnqueued.PhantomReference_isEnqueued_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put(
               "lang.ref.SoftReference.isEnqueued.SoftReference_isEnqueued_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
           .put("lang.ref.SoftReference.get.SoftReference_get_A01", any())
           .put(
               "lang.ref.ReferenceQueue.poll.ReferenceQueue_poll_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V6_0_1, Version.V5_1_1)))
-          .put("lang.StackTraceElement.serialization.StackTraceElement_serialization_A01", any())
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V6_0_1,
+                      Runtime.ART_V5_1_1,
+                      Runtime.JAVA)))
+          .put(
+              "lang.StackTraceElement.serialization.StackTraceElement_serialization_A01",
+              anyDexVm())
           .put("lang.ref.WeakReference.get.WeakReference_get_A01", any())
           .put(
               "lang.StackTraceElement.toString.StackTraceElement_toString_A01",
-              match(runtimes(Version.DEFAULT)))
+              match(runtimes(Runtime.ART_DEFAULT)))
           .put(
               "lang.NullPointerException.serialization.NullPointerException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
-              "lang.VirtualMachineError.serialization.VirtualMachineError_serialization_A01", any())
+              "lang.VirtualMachineError.serialization.VirtualMachineError_serialization_A01",
+              anyDexVm())
           .put(
               "lang.ClassCircularityError.serialization.ClassCircularityError_serialization_A01",
-              any())
-          .put("lang.ThreadDeath.serialization.ThreadDeath_serialization_A01", any())
-          .put("lang.InstantiationError.serialization.InstantiationError_serialization_A01", any())
+              anyDexVm())
+          .put("lang.ThreadDeath.serialization.ThreadDeath_serialization_A01", anyDexVm())
+          .put(
+              "lang.InstantiationError.serialization.InstantiationError_serialization_A01",
+              anyDexVm())
           .put(
               "lang.IllegalThreadStateException.serialization.IllegalThreadStateException_serialization_A01",
-              any())
-          .put("lang.ProcessBuilder.environment.ProcessBuilder_environment_A05", any())
-          .put("lang.ProcessBuilder.environment.ProcessBuilder_environment_A06", any())
-          .put("lang.ProcessBuilder.start.ProcessBuilder_start_A05", any())
-          .put("lang.ProcessBuilder.start.ProcessBuilder_start_A06", any())
-          .put("lang.ClassFormatError.serialization.ClassFormatError_serialization_A01", any())
-          .put("lang.Math.cbrtD.Math_cbrt_A01", match(runtimesFrom(Version.V6_0_1)))
-          .put("lang.Math.powDD.Math_pow_A08", any())
+              anyDexVm())
+          .put("lang.ProcessBuilder.environment.ProcessBuilder_environment_A05", anyDexVm())
+          .put("lang.ProcessBuilder.environment.ProcessBuilder_environment_A06", anyDexVm())
+          .put("lang.ProcessBuilder.start.ProcessBuilder_start_A05", anyDexVm())
+          .put("lang.ProcessBuilder.start.ProcessBuilder_start_A06", anyDexVm())
+          .put("lang.ClassFormatError.serialization.ClassFormatError_serialization_A01", anyDexVm())
+          .put(
+              "lang.Math.cbrtD.Math_cbrt_A01",
+              match(TestCondition.artRuntimesFrom(Runtime.ART_V6_0_1)))
+          .put("lang.Math.powDD.Math_pow_A08", anyDexVm())
           .put(
               "lang.IncompatibleClassChangeError.serialization.IncompatibleClassChangeError_serialization_A01",
-              any())
-          .put("lang.Float.serialization.Float_serialization_A01", any())
+              anyDexVm())
+          .put("lang.Float.serialization.Float_serialization_A01", anyDexVm())
           .put("lang.Float.toStringF.Float_toString_A02", any())
           .put(
               "lang.Short.valueOfLjava_lang_StringI.Short_valueOf_A02",
-              match(runtimesFrom(Version.V5_1_1)))
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
           .put(
               "lang.Short.valueOfLjava_lang_String.Short_valueOf_A02",
-              match(runtimesFrom(Version.V5_1_1)))
-          .put("lang.Short.serialization.Short_serialization_A01", any())
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
+          .put("lang.Short.serialization.Short_serialization_A01", anyDexVm())
           .put(
               "lang.Short.parseShortLjava_lang_String.Short_parseShort_A02",
-              match(runtimesFrom(Version.V5_1_1)))
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
           .put(
               "lang.Short.decodeLjava_lang_String.Short_decode_A04",
-              match(runtimesFrom(Version.V5_1_1)))
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
           .put(
               "lang.Short.ConstructorLjava_lang_String.Short_Constructor_A02",
-              match(runtimesFrom(Version.V5_1_1)))
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
           .put(
               "lang.ClassNotFoundException.serialization.ClassNotFoundException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.annotation.AnnotationFormatError.serialization.AnnotationFormatError_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.Short.parseShortLjava_lang_StringI.Short_parseShort_A02",
-              match(runtimesFrom(Version.V5_1_1)))
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
           .put(
               "lang.annotation.IncompleteAnnotationException.ConstructorLjava_lang_ClassLjava_lang_String.IncompleteAnnotationException_Constructor_A01",
-              match(runtimes(Version.DEFAULT)))
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.JAVA)))
           .put(
               "lang.InterruptedException.serialization.InterruptedException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.annotation.IncompleteAnnotationException.Class.IncompleteAnnotationException_class_A01",
               any())
-          .put("lang.annotation.Annotation.Class.Annotation_class_A03", any())
-          .put("lang.annotation.Annotation.serialization.Annotation_serialization_A01", any())
-          .put("lang.annotation.Annotation.annotationType.Annotation_annotationType_A01", any())
+          .put("lang.annotation.Annotation.Class.Annotation_class_A03", anyDexVm())
+          .put("lang.annotation.Annotation.serialization.Annotation_serialization_A01", anyDexVm())
+          .put(
+              "lang.annotation.Annotation.annotationType.Annotation_annotationType_A01", anyDexVm())
           .put(
               "lang.annotation.IncompleteAnnotationException.serialization.IncompleteAnnotationException_serialization_A01",
-              any())
+              anyDexVm())
           .put("lang.annotation.Annotation.Class.Annotation_class_A02", any())
-          .put("lang.annotation.Retention.Retention_class_A01", any())
+          .put("lang.annotation.Retention.Retention_class_A01", anyDexVm())
           .put(
               "lang.annotation.AnnotationTypeMismatchException.Class.AnnotationTypeMismatchException_class_A01",
               any())
-          .put("lang.Long.serialization.Long_serialization_A01", any())
-          .put("lang.ThreadGroup.resume.ThreadGroup_resume_A01", any())
+          .put("lang.Long.serialization.Long_serialization_A01", anyDexVm())
+          .put("lang.ThreadGroup.resume.ThreadGroup_resume_A01", anyDexVm())
           .put(
-              "lang.AbstractMethodError.serialization.AbstractMethodError_serialization_A01", any())
-          .put("lang.RuntimeException.serialization.RuntimeException_serialization_A01", any())
-          .put("lang.ThreadGroup.suspend.ThreadGroup_suspend_A01", any())
+              "lang.AbstractMethodError.serialization.AbstractMethodError_serialization_A01",
+              anyDexVm())
+          .put("lang.RuntimeException.serialization.RuntimeException_serialization_A01", anyDexVm())
+          .put("lang.ThreadGroup.suspend.ThreadGroup_suspend_A01", anyDexVm())
           .put(
               "lang.ThreadGroup.ConstructorLjava_lang_ThreadGroupLjava_lang_String.ThreadGroup_Constructor_A03",
-              any())
-          .put("lang.ThreadGroup.stop.ThreadGroup_stop_A01", any())
-          .put("lang.ThreadGroup.enumerate_Thread.ThreadGroup_enumerate_A01", any())
+              anyDexVm())
+          .put("lang.ThreadGroup.stop.ThreadGroup_stop_A01", anyDexVm())
+          .put("lang.ThreadGroup.enumerate_Thread.ThreadGroup_enumerate_A01", anyDexVm())
           .put(
               "lang.ThreadGroup.ConstructorLjava_lang_ThreadGroupLjava_lang_String.ThreadGroup_Constructor_A04",
-              any())
-          .put("lang.ThreadGroup.parentOfLjava_lang_ThreadGroup.ThreadGroup_parentOf_A01", any())
-          .put("lang.ThreadGroup.getMaxPriority.ThreadGroup_getMaxPriority_A02", any())
-          .put("lang.ThreadGroup.checkAccess.ThreadGroup_checkAccess_A03", any())
-          .put("lang.ThreadGroup.enumerate_ThreadZ.ThreadGroup_enumerate_A01", any())
+              anyDexVm())
+          .put(
+              "lang.ThreadGroup.parentOfLjava_lang_ThreadGroup.ThreadGroup_parentOf_A01",
+              anyDexVm())
+          .put("lang.ThreadGroup.getMaxPriority.ThreadGroup_getMaxPriority_A02", anyDexVm())
+          .put("lang.ThreadGroup.checkAccess.ThreadGroup_checkAccess_A03", anyDexVm())
+          .put("lang.ThreadGroup.enumerate_ThreadZ.ThreadGroup_enumerate_A01", anyDexVm())
           .put(
               "lang.ThreadGroup.uncaughtExceptionLjava_lang_ThreadLjava_lang_Throwable.ThreadGroup_uncaughtException_A01",
-              any())
-          .put("lang.ThreadGroup.checkAccess.ThreadGroup_checkAccess_A02", any())
-          .put("lang.ThreadGroup.ConstructorLjava_lang_String.ThreadGroup_Constructor_A04", any())
-          .put("lang.ThreadGroup.activeCount.ThreadGroup_activeCount_A01", any())
-          .put("lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A03", any())
-          .put("lang.ThreadGroup.ConstructorLjava_lang_String.ThreadGroup_Constructor_A03", any())
-          .put("lang.ThreadGroup.getParent.ThreadGroup_getParent_A03", any())
+              anyDexVm())
+          .put("lang.ThreadGroup.checkAccess.ThreadGroup_checkAccess_A02", anyDexVm())
+          .put(
+              "lang.ThreadGroup.ConstructorLjava_lang_String.ThreadGroup_Constructor_A04",
+              anyDexVm())
+          .put("lang.ThreadGroup.activeCount.ThreadGroup_activeCount_A01", anyDexVm())
+          .put("lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A03", anyDexVm())
+          .put(
+              "lang.ThreadGroup.ConstructorLjava_lang_String.ThreadGroup_Constructor_A03",
+              anyDexVm())
+          .put("lang.ThreadGroup.getParent.ThreadGroup_getParent_A03", anyDexVm())
           .put("lang.Class.getDeclaredConstructors.Class_getDeclaredConstructors_A02", any())
-          .put("lang.AssertionError.serialization.AssertionError_serialization_A01", any())
-          .put("lang.Class.getClassLoader.Class_getClassLoader_A01", any())
-          .put("lang.Class.getDeclaringClass.Class_getDeclaringClass_A01", any())
+          .put("lang.AssertionError.serialization.AssertionError_serialization_A01", anyDexVm())
+          .put("lang.Class.getClassLoader.Class_getClassLoader_A01", anyDexVm())
+          .put("lang.Class.getDeclaringClass.Class_getDeclaringClass_A01", anyDexVm())
           .put(
               "lang.Class.getDeclaredFields.Class_getDeclaredFields_A01",
-              match(runtimesFrom(Version.V5_1_1)))
-          .put("lang.Class.getClassLoader.Class_getClassLoader_A02", any())
-          .put("lang.Class.getClassLoader.Class_getClassLoader_A03", any())
+              match(TestCondition.artRuntimesFrom(Runtime.ART_V5_1_1)))
+          .put("lang.Class.getClassLoader.Class_getClassLoader_A02", anyDexVm())
+          .put("lang.Class.getClassLoader.Class_getClassLoader_A03", anyDexVm())
           .put("lang.Class.getDeclaredFields.Class_getDeclaredFields_A02", any())
-          .put("lang.Class.getResourceLjava_lang_String.Class_getResource_A01", any())
-          .put("lang.Class.getConstructor_Ljava_lang_Class.Class_getConstructor_A03", any())
+          .put("lang.Class.getResourceLjava_lang_String.Class_getResource_A01", anyDexVm())
+          .put("lang.Class.getConstructor_Ljava_lang_Class.Class_getConstructor_A03", anyDexVm())
           .put(
               "lang.Class.forNameLjava_lang_StringZLjava_lang_ClassLoader.Class_forName_A03", any())
           .put(
-              "lang.Class.forNameLjava_lang_StringZLjava_lang_ClassLoader.Class_forName_A07", any())
+              "lang.Class.forNameLjava_lang_StringZLjava_lang_ClassLoader.Class_forName_A07",
+              anyDexVm())
           .put(
-              "lang.Class.forNameLjava_lang_StringZLjava_lang_ClassLoader.Class_forName_A01", any())
+              "lang.Class.forNameLjava_lang_StringZLjava_lang_ClassLoader.Class_forName_A01",
+              anyDexVm())
           .put("lang.Class.getConstructor_Ljava_lang_Class.Class_getConstructor_A04", any())
-          .put("lang.Class.serialization.Class_serialization_A01", any())
+          .put("lang.Class.serialization.Class_serialization_A01", anyDexVm())
           .put("lang.Class.getMethods.Class_getMethods_A02", any())
           .put(
               "lang.Class.getDeclaredMethodLjava_lang_String_Ljava_lang_Class.Class_getDeclaredMethod_A05",
@@ -598,28 +745,36 @@
           .put("lang.Class.getClasses.Class_getClasses_A02", any())
           .put(
               "lang.Class.getDeclaredMethodLjava_lang_String_Ljava_lang_Class.Class_getDeclaredMethod_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.Class.getClasses.Class_getClasses_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V4_4_4, Version.V4_0_4)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V4_4_4,
+                      Runtime.ART_V4_0_4,
+                      Runtime.JAVA)))
           .put("lang.Class.getProtectionDomain.Class_getProtectionDomain_A01", any())
-          .put("lang.Class.getProtectionDomain.Class_getProtectionDomain_A02", any())
+          .put("lang.Class.getProtectionDomain.Class_getProtectionDomain_A02", anyDexVm())
           .put(
               "lang.Class.getDeclaredMethods.Class_getDeclaredMethods_A01",
-              match(runtimesFrom(Version.V7_0_0)))
-          .put("lang.Class.getMethods.Class_getMethods_A01", match(runtimesFrom(Version.V7_0_0)))
+              match(artRuntimesFromAndJava(Runtime.ART_V7_0_0)))
+          .put(
+              "lang.Class.getMethods.Class_getMethods_A01",
+              match(artRuntimesFromAndJava(Runtime.ART_V7_0_0)))
           .put("lang.Class.getGenericInterfaces.Class_getGenericInterfaces_A04", any())
           .put("lang.Class.getDeclaredFieldLjava_lang_String.Class_getDeclaredField_A04", any())
           .put("lang.Class.getDeclaredMethods.Class_getDeclaredMethods_A02", any())
           .put(
               "lang.Class.getResourceAsStreamLjava_lang_String.Class_getResourceAsStream_A01",
-              any())
+              anyDexVm())
           .put("lang.Class.getGenericInterfaces.Class_getGenericInterfaces_A05", any())
           .put("lang.Class.getAnnotationLjava_lang_Class.Class_getAnnotation_A01", any())
           .put("lang.Class.getGenericInterfaces.Class_getGenericInterfaces_A03", any())
           .put("lang.Class.getDeclaredClasses.Class_getDeclaredClasses_A02", any())
-          .put("lang.Class.desiredAssertionStatus.Class_desiredAssertionStatus_A01", any())
-          .put("lang.Class.getPackage.Class_getPackage_A01", any())
+          .put("lang.Class.desiredAssertionStatus.Class_desiredAssertionStatus_A01", anyDexVm())
+          .put("lang.Class.getPackage.Class_getPackage_A01", anyDexVm())
           .put("lang.Class.getFieldLjava_lang_String.Class_getField_A04", any())
           .put("lang.Class.getTypeParameters.Class_getTypeParameters_A02", any())
           .put("lang.Class.getDeclaredAnnotations.Class_getDeclaredAnnotations_A01", any())
@@ -629,344 +784,384 @@
           .put("lang.Class.getFields.Class_getFields_A02", any())
           .put("lang.Class.getGenericSuperclass.Class_getGenericSuperclass_A03", any())
           .put("lang.Class.getGenericSuperclass.Class_getGenericSuperclass_A04", any())
-          .put("lang.Class.getSigners.Class_getSigners_A01", any())
+          .put("lang.Class.getSigners.Class_getSigners_A01", anyDexVm())
           .put(
               "lang.Class.getMethodLjava_lang_String_Ljava_lang_Class.Class_getMethod_A01",
-              match(runtimes(Version.DEFAULT, Version.V7_0_0, Version.V4_4_4, Version.V4_0_4)))
-          .put("lang.Class.getModifiers.Class_getModifiers_A03", match(runtimes(Version.V4_0_4)))
-          .put("lang.Class.newInstance.Class_newInstance_A06", match(runtimes(Version.V4_0_4)))
+              match(
+                  runtimes(
+                      Runtime.ART_DEFAULT,
+                      Runtime.ART_V7_0_0,
+                      Runtime.ART_V4_4_4,
+                      Runtime.ART_V4_0_4)))
+          .put(
+              "lang.Class.getModifiers.Class_getModifiers_A03", match(runtimes(Runtime.ART_V4_0_4)))
+          .put("lang.Class.newInstance.Class_newInstance_A06", match(runtimes(Runtime.ART_V4_0_4)))
           .put("lang.Class.getGenericSuperclass.Class_getGenericSuperclass_A01", any())
           .put("lang.Class.getGenericSuperclass.Class_getGenericSuperclass_A02", any())
           .put("lang.Class.newInstance.Class_newInstance_A07", any())
           .put(
               "lang.Class.getDeclaredConstructor_Ljava_lang_Class.Class_getDeclaredConstructor_A02",
-              any())
+              anyDexVm())
           .put("lang.Class.getMethodLjava_lang_String_Ljava_lang_Class.Class_getMethod_A05", any())
-          .put("lang.Class.forNameLjava_lang_String.Class_forName_A01", any())
+          .put("lang.Class.forNameLjava_lang_String.Class_forName_A01", anyDexVm())
           .put(
               "lang.Class.getDeclaredConstructor_Ljava_lang_Class.Class_getDeclaredConstructor_A03",
               any())
-          .put("lang.Class.getMethodLjava_lang_String_Ljava_lang_Class.Class_getMethod_A03", any())
+          .put(
+              "lang.Class.getMethodLjava_lang_String_Ljava_lang_Class.Class_getMethod_A03",
+              anyDexVm())
           .put("lang.Class.forNameLjava_lang_String.Class_forName_A02", any())
           .put(
               "lang.UnsatisfiedLinkError.serialization.UnsatisfiedLinkError_serialization_A01",
-              any())
+              anyDexVm())
           .put("lang.Class.getAnnotations.Class_getAnnotations_A01", any())
           .put(
               "lang.EnumConstantNotPresentException.serialization.EnumConstantNotPresentException_serialization_A01",
-              any())
+              anyDexVm())
           .put("lang.String.toLowerCase.String_toLowerCase_A01", any())
           .put("lang.String.splitLjava_lang_StringI.String_split_A01", any())
-          .put("lang.String.serialization.String_serialization_A01", any())
+          .put("lang.String.serialization.String_serialization_A01", anyDexVm())
           .put("lang.String.regionMatchesZILjava_lang_StringII.String_regionMatches_A01", any())
           .put("lang.String.valueOfF.String_valueOf_A01", any())
           .put("lang.String.Constructor_BLjava_nio_charset_Charset.String_Constructor_A01", any())
-          .put("lang.String.concatLjava_lang_String.String_concat_A01", any())
-          .put("lang.String.matchesLjava_lang_String.String_matches_A01", any())
-          .put("lang.String.CASE_INSENSITIVE_ORDER.serialization.String_serialization_A01", any())
+          .put("lang.String.concatLjava_lang_String.String_concat_A01", anyDexVm())
+          .put("lang.String.matchesLjava_lang_String.String_matches_A01", anyDexVm())
+          .put(
+              "lang.String.CASE_INSENSITIVE_ORDER.serialization.String_serialization_A01",
+              anyDexVm())
           .put(
               "lang.String.getBytesLjava_lang_String.String_getBytes_A14",
-              match(runtimesUpTo(Version.V7_0_0)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V7_0_0)))
           .put("lang.String.splitLjava_lang_String.String_split_A01", any())
           .put("lang.String.getBytesII_BI.String_getBytes_A03", any())
-          .put("lang.String.getBytesII_BI.String_getBytes_A02", any())
+          .put("lang.String.getBytesII_BI.String_getBytes_A02", anyDexVm())
           .put("lang.String.toLowerCaseLjava_util_Locale.String_toLowerCase_A01", any())
           .put("lang.String.Constructor_BIILjava_nio_charset_Charset.String_Constructor_A01", any())
-          .put("lang.String.getBytesLjava_nio_charset_Charset.String_getBytes_A01", any())
+          .put("lang.String.getBytesLjava_nio_charset_Charset.String_getBytes_A01", anyDexVm())
           .put("lang.String.valueOfD.String_valueOf_A01", any())
           .put(
               "lang.String.getBytesLjava_nio_charset_Charset.String_getBytes_A14",
-              match(runtimesUpTo(Version.V7_0_0)))
-          .put("lang.Package.isSealed.Package_isSealed_A01", any())
-          .put("lang.Package.getSpecificationVersion.Package_getSpecificationVersion_A01", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V7_0_0)))
+          .put("lang.Package.isSealed.Package_isSealed_A01", anyDexVm())
+          .put(
+              "lang.Package.getSpecificationRuntime.ART_Package_getSpecificationVersion_A01",
+              anyDexVm())
           .put("lang.Package.getAnnotationLjava_lang_Class.Package_getAnnotation_A01", any())
           .put(
               "lang.Package.isAnnotationPresentLjava_lang_Class.Package_isAnnotationPresent_A02",
-              match(and(runtimes(Version.V4_0_4), runtimesFrom(Version.V7_0_0))))
-          .put("lang.Package.getName.Package_getName_A01", any())
-          .put("lang.Package.getImplementationVersion.Package_getImplementationVersion_A01", any())
+              match(
+                  and(
+                      runtimes(Runtime.ART_V4_0_4),
+                      TestCondition.artRuntimesFrom(Runtime.ART_V7_0_0))))
+          .put("lang.Package.getName.Package_getName_A01", anyDexVm())
+          .put(
+              "lang.Package.getImplementationRuntime.ART_Package_getImplementationVersion_A01",
+              anyDexVm())
           .put("lang.Package.getDeclaredAnnotations.Package_getDeclaredAnnotations_A01", any())
-          .put("lang.Package.getSpecificationVendor.Package_getSpecificationVendor_A01", any())
+          .put("lang.Package.getSpecificationVendor.Package_getSpecificationVendor_A01", anyDexVm())
           .put(
               "lang.Package.getAnnotationLjava_lang_Class.Package_getAnnotation_A02",
-              match(and(runtimesFrom(Version.V7_0_0), runtimes(Version.V4_0_4))))
-          .put("lang.Package.isCompatibleWithLjava_lang_String.Package_isCompatibleWith_A01", any())
-          .put("lang.Package.toString.Package_toString_A01", any())
+              match(
+                  and(
+                      TestCondition.artRuntimesFrom(Runtime.ART_V7_0_0),
+                      runtimes(Runtime.ART_V4_0_4))))
+          .put(
+              "lang.Package.isCompatibleWithLjava_lang_String.Package_isCompatibleWith_A01",
+              anyDexVm())
+          .put("lang.Package.toString.Package_toString_A01", anyDexVm())
           .put("lang.Package.getAnnotations.Package_getAnnotations_A01", any())
           .put(
               "lang.Package.isAnnotationPresentLjava_lang_Class.Package_isAnnotationPresent_A01",
               any())
-          .put("lang.Package.getSpecificationTitle.Package_getSpecificationTitle_A01", any())
-          .put("lang.Package.getImplementationTitle.Package_getImplementationTitle_A01", any())
-          .put("lang.Package.getPackages.Package_getPackages_A01", any())
-          .put("lang.Package.hashCode.Package_hashCode_A01", any())
-          .put("lang.Package.getPackageLjava_lang_String.Package_getPackage_A01", any())
-          .put("lang.Package.getImplementationVendor.Package_getImplementationVendor_A01", any())
-          .put("lang.Package.isSealedLjava_net_URL.Package_isSealed_A01", any())
-          .put("lang.StringBuilder.serialization.StringBuilder_serialization_A01", any())
+          .put("lang.Package.getSpecificationTitle.Package_getSpecificationTitle_A01", anyDexVm())
+          .put("lang.Package.getImplementationTitle.Package_getImplementationTitle_A01", anyDexVm())
+          .put("lang.Package.getPackages.Package_getPackages_A01", anyDexVm())
+          .put("lang.Package.hashCode.Package_hashCode_A01", anyDexVm())
+          .put("lang.Package.getPackageLjava_lang_String.Package_getPackage_A01", anyDexVm())
+          .put(
+              "lang.Package.getImplementationVendor.Package_getImplementationVendor_A01",
+              anyDexVm())
+          .put("lang.Package.isSealedLjava_net_URL.Package_isSealed_A01", anyDexVm())
+          .put("lang.StringBuilder.serialization.StringBuilder_serialization_A01", anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_io_FileDescriptor.SecurityManager_checkRead_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkAwtEventQueueAccess.SecurityManager_checkAwtEventQueueAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkWriteLjava_lang_String.SecurityManager_checkWrite_A02",
-              any())
-          .put("lang.SecurityManager.inClassLoader.SecurityManager_inClassLoader_A01", any())
+              anyDexVm())
+          .put("lang.SecurityManager.inClassLoader.SecurityManager_inClassLoader_A01", anyDexVm())
           .put(
               "lang.SecurityManager.checkPermissionLjava_security_PermissionLjava_lang_Object.SecurityManager_checkPermission_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_io_FileDescriptor.SecurityManager_checkRead_A01",
-              any())
-          .put("lang.SecurityManager.inCheck.SecurityManager_inCheck_A01", any())
+              anyDexVm())
+          .put("lang.SecurityManager.inCheck.SecurityManager_inCheck_A01", anyDexVm())
           .put(
               "lang.SecurityManager.currentClassLoader.SecurityManager_currentClassLoader_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPrintJobAccess.SecurityManager_checkPrintJobAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkWriteLjava_lang_String.SecurityManager_checkWrite_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPackageAccessLjava_lang_String.SecurityManager_checkPackageAccess_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkAcceptLjava_lang_StringI.SecurityManager_checkAccept_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPermissionLjava_security_PermissionLjava_lang_Object.SecurityManager_checkPermission_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.currentClassLoader.SecurityManager_currentClassLoader_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkMulticastLjava_net_InetAddress.SecurityManager_checkMulticast_A02",
-              any())
-          .put("lang.SecurityManager.checkListenI.SecurityManager_checkListen_A01", any())
+              anyDexVm())
+          .put("lang.SecurityManager.checkListenI.SecurityManager_checkListen_A01", anyDexVm())
           .put(
               "lang.SecurityManager.getSecurityContext.SecurityManager_getSecurityContext_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPackageAccessLjava_lang_String.SecurityManager_checkPackageAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkMemberAccessLjava_lang_ClassI.SecurityManager_checkMemberAccess_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkMulticastLjava_net_InetAddressB.SecurityManager_checkMulticast_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkAcceptLjava_lang_StringI.SecurityManager_checkAccept_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkMulticastLjava_net_InetAddress.SecurityManager_checkMulticast_A01",
-              any())
-          .put("lang.SecurityManager.Constructor.SecurityManager_Constructor_A01", any())
+              anyDexVm())
+          .put("lang.SecurityManager.Constructor.SecurityManager_Constructor_A01", anyDexVm())
           .put("lang.SecurityManager.getClassContext.SecurityManager_getClassContext_A01", any())
           .put(
               "lang.SecurityManager.checkMemberAccessLjava_lang_ClassI.SecurityManager_checkMemberAccess_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkDeleteLjava_lang_String.SecurityManager_checkDelete_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_lang_StringLjava_lang_Object.SecurityManager_checkRead_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkMulticastLjava_net_InetAddressB.SecurityManager_checkMulticast_A01",
-              any())
+              anyDexVm())
           .put("lang.SecurityManager.checkListenI.SecurityManager_checkListen_A02", any())
           .put(
               "lang.SecurityManager.checkAccessLjava_lang_Thread.SecurityManager_checkAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkWriteLjava_io_FileDescriptor.SecurityManager_checkWrite_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkDeleteLjava_lang_String.SecurityManager_checkDelete_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPropertiesAccess.SecurityManager_checkPropertiesAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_lang_StringLjava_lang_Object.SecurityManager_checkRead_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkAccessLjava_lang_ThreadGroup.SecurityManager_checkAccess_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkAccessLjava_lang_Thread.SecurityManager_checkAccess_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPackageDefinitionLjava_lang_String.SecurityManager_checkPackageDefinition_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_lang_String.SecurityManager_checkRead_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkWriteLjava_io_FileDescriptor.SecurityManager_checkWrite_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_lang_StringLjava_lang_Object.SecurityManager_checkRead_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkExecLjava_lang_String.SecurityManager_checkExec_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPackageDefinitionLjava_lang_String.SecurityManager_checkPackageDefinition_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkExecLjava_lang_String.SecurityManager_checkExec_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkCreateClassLoader.SecurityManager_checkCreateClassLoader_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkReadLjava_lang_String.SecurityManager_checkRead_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkAccessLjava_lang_ThreadGroup.SecurityManager_checkAccess_A01",
-              any())
-          .put("lang.SecurityManager.inClassLjava_lang_String.SecurityManager_inClass_A03", any())
+              anyDexVm())
+          .put(
+              "lang.SecurityManager.inClassLjava_lang_String.SecurityManager_inClass_A03",
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringILjava_lang_Object.SecurityManager_checkConnect_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkExecLjava_lang_String.SecurityManager_checkExec_A01",
-              any())
-          .put("lang.SecurityManager.checkSetFactory.SecurityManager_checkSetFactory_A01", any())
+              anyDexVm())
+          .put(
+              "lang.SecurityManager.checkSetFactory.SecurityManager_checkSetFactory_A01",
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringILjava_lang_Object.SecurityManager_checkConnect_A04",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPermissionLjava_security_Permission.SecurityManager_checkPermission_A01",
-              any())
-          .put("lang.SecurityManager.inClassLjava_lang_String.SecurityManager_inClass_A01", any())
-          .put("lang.SecurityManager.inClassLjava_lang_String.SecurityManager_inClass_A02", any())
+              anyDexVm())
+          .put(
+              "lang.SecurityManager.inClassLjava_lang_String.SecurityManager_inClass_A01",
+              anyDexVm())
+          .put(
+              "lang.SecurityManager.inClassLjava_lang_String.SecurityManager_inClass_A02",
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPropertyAccessLjava_lang_String.SecurityManager_checkPropertyAccess_A02",
-              any())
-          .put("lang.SecurityManager.checkExitI.SecurityManager_checkExit_A01", any())
+              anyDexVm())
+          .put("lang.SecurityManager.checkExitI.SecurityManager_checkExit_A01", anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringILjava_lang_Object.SecurityManager_checkConnect_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringILjava_lang_Object.SecurityManager_checkConnect_A01",
-              any())
-          .put("lang.SecurityManager.classLoaderDepth.SecurityManager_classLoaderDepth_A02", any())
+              anyDexVm())
+          .put(
+              "lang.SecurityManager.classLoaderDepth.SecurityManager_classLoaderDepth_A02",
+              anyDexVm())
           .put(
               "lang.SecurityManager.classDepthLjava_lang_String.SecurityManager_classDepth_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPropertyAccessLjava_lang_String.SecurityManager_checkPropertyAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkPropertyAccessLjava_lang_String.SecurityManager_checkPropertyAccess_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringI.SecurityManager_checkConnect_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkLinkLjava_lang_String.SecurityManager_checkLink_A02",
-              any())
+              anyDexVm())
           .put("lang.SecurityManager.classLoaderDepth.SecurityManager_classLoaderDepth_A01", any())
           .put(
               "lang.SecurityManager.checkPermissionLjava_security_Permission.SecurityManager_checkPermission_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.currentLoadedClass.SecurityManager_currentLoadedClass_A01",
               any())
           .put(
               "lang.SecurityManager.checkSecurityAccessLjava_lang_String.SecurityManager_checkSecurityAccess_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringI.SecurityManager_checkConnect_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkConnectLjava_lang_StringI.SecurityManager_checkConnect_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkTopLevelWindowLjava_lang_Object.SecurityManager_checkTopLevelWindow_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.currentLoadedClass.SecurityManager_currentLoadedClass_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.classDepthLjava_lang_String.SecurityManager_classDepth_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkSecurityAccessLjava_lang_String.SecurityManager_checkSecurityAccess_A01",
-              any())
-          .put("lang.Throwable.serialization.Throwable_serialization_A01", any())
+              anyDexVm())
+          .put("lang.Throwable.serialization.Throwable_serialization_A01", anyDexVm())
           .put(
               "lang.SecurityManager.checkTopLevelWindowLjava_lang_Object.SecurityManager_checkTopLevelWindow_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkLinkLjava_lang_String.SecurityManager_checkLink_A01",
-              any())
+              anyDexVm())
           .put("lang.Throwable.getStackTrace.Throwable_getStackTrace_A01", any())
           .put(
               "lang.SecurityManager.checkSystemClipboardAccess.SecurityManager_checkSystemClipboardAccess_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.SecurityManager.checkSecurityAccessLjava_lang_String.SecurityManager_checkSecurityAccess_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.ReflectPermission.Constructor_java_lang_String.ReflectPermission_Constructor_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.MalformedParameterizedTypeException.serialization.MalformedParameterizedTypeException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.ReflectPermission.Constructor_java_lang_StringLjava_lang_String.ReflectPermission_Constructor_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.UnsupportedClassVersionError.serialization.UnsupportedClassVersionError_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.ReflectPermission.Constructor_java_lang_String.ReflectPermission_Constructor_A01",
               any())
-          .put("lang.reflect.ReflectPermission.Class.ReflectPermission_class_A01", any())
+          .put("lang.reflect.ReflectPermission.Class.ReflectPermission_class_A01", anyDexVm())
           .put("lang.reflect.Proxy.serialization.Proxy_serialization_A01", any())
           .put(
               "lang.reflect.ReflectPermission.Constructor_java_lang_StringLjava_lang_String.ReflectPermission_Constructor_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.ReflectPermission.Constructor_java_lang_String.ReflectPermission_Constructor_A02",
-              any())
-          .put("lang.reflect.ReflectPermission.Class.ReflectPermission_class_A02", any())
+              anyDexVm())
+          .put("lang.reflect.ReflectPermission.Class.ReflectPermission_class_A02", anyDexVm())
           .put(
               "lang.reflect.ReflectPermission.Constructor_java_lang_StringLjava_lang_String.ReflectPermission_Constructor_A01",
               any())
           .put(
               "lang.reflect.Proxy.getInvocationHandlerLjava_lang_Object.Proxy_getInvocationHandler_A02",
-              match(runtimesFrom(Version.V5_1_1)))
+              match(artRuntimesFromAndJava(Runtime.ART_V5_1_1)))
           .put("lang.reflect.Proxy.Class.Proxy_class_A01", any())
-          .put("lang.reflect.Proxy.Class.Proxy_class_A02", match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Proxy.Class.Proxy_class_A03", match(runtimesUpTo(Version.V4_4_4)))
+          .put(
+              "lang.reflect.Proxy.Class.Proxy_class_A02",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.reflect.Proxy.Class.Proxy_class_A03",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
           .put(
               "lang.reflect.Proxy.getProxyClassLjava_lang_ClassLoader_Ljava_lang_Class.Proxy_getProxyClass_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.Proxy.getProxyClassLjava_lang_ClassLoader_Ljava_lang_Class.Proxy_getProxyClass_A03",
-              any())
-          .put("lang.reflect.Proxy.h.Proxy_h_A01", match(runtimes(Version.DEFAULT)))
+              anyDexVm())
+          .put(
+              "lang.reflect.Proxy.h.Proxy_h_A01",
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.JAVA)))
           .put("lang.reflect.Proxy.serialization.Proxy_serialization_A02", any())
           .put(
               "lang.reflect.GenericSignatureFormatError.serialization.GenericSignatureFormatError_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.Proxy.newProxyInstanceLjava_lang_ClassLoader_Ljava_lang_ClassLjava_lang_reflect_InvocationHandler.Proxy_newProxyInstance_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.Proxy.ConstructorLjava_lang_reflect_InvocationHandler.Proxy_Constructor_A01",
-              match(runtimes(Version.DEFAULT)))
+              match(runtimes(Runtime.ART_DEFAULT, Runtime.JAVA)))
           .put(
               "lang.reflect.Proxy.newProxyInstanceLjava_lang_ClassLoader_Ljava_lang_ClassLjava_lang_reflect_InvocationHandler.Proxy_newProxyInstance_A01",
-              any())
+              anyDexVm())
           .put("lang.reflect.Modifier.isStrictI.Modifier_isStrict_A01", any())
           .put("lang.reflect.Method.getGenericReturnType.Method_getGenericReturnType_A03", any())
           .put("lang.reflect.Method.getGenericReturnType.Method_getGenericReturnType_A02", any())
@@ -982,7 +1177,7 @@
               any())
           .put(
               "lang.reflect.Method.invokeLjava_lang_Object_Ljava_lang_Object.Method_invoke_A07",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.Method.getGenericExceptionTypes.Method_getGenericExceptionTypes_A04",
               any())
@@ -1001,85 +1196,85 @@
               any())
           .put(
               "lang.reflect.InvocationHandler.invokeLjava_lang_ObjectLjava_lang_reflect_Method_Ljava_lang_Object.InvocationHandler_invoke_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
           .put(
               "lang.reflect.InvocationHandler.invokeLjava_lang_ObjectLjava_lang_reflect_Method_Ljava_lang_Object.InvocationHandler_invoke_A02",
-              any())
+              anyDexVm())
           .put("lang.reflect.Method.getDefaultValue.Method_getDefaultValue_A02", any())
           .put(
               "lang.reflect.Method.hashCode.Method_hashCode_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
           .put("lang.reflect.Method.toString.Method_toString_A01", any())
           .put(
               "lang.reflect.Method.getGenericParameterTypes.Method_getGenericParameterTypes_A02",
               any())
-          .put("lang.reflect.Field.getFloatLjava_lang_Object.Field_getFloat_A05", any())
-          .put("lang.reflect.Field.getDeclaringClass.Field_getDeclaringClass_A01", any())
-          .put("lang.reflect.Field.getByteLjava_lang_Object.Field_getByte_A05", any())
-          .put("lang.reflect.Field.getCharLjava_lang_Object.Field_getChar_A05", any())
-          .put("lang.reflect.Field.getBooleanLjava_lang_Object.Field_getBoolean_A05", any())
-          .put("lang.reflect.Field.setByteLjava_lang_ObjectB.Field_setByte_A05", any())
-          .put("lang.reflect.Field.setByteLjava_lang_ObjectB.Field_setByte_A01", any())
+          .put("lang.reflect.Field.getFloatLjava_lang_Object.Field_getFloat_A05", anyDexVm())
+          .put("lang.reflect.Field.getDeclaringClass.Field_getDeclaringClass_A01", anyDexVm())
+          .put("lang.reflect.Field.getByteLjava_lang_Object.Field_getByte_A05", anyDexVm())
+          .put("lang.reflect.Field.getCharLjava_lang_Object.Field_getChar_A05", anyDexVm())
+          .put("lang.reflect.Field.getBooleanLjava_lang_Object.Field_getBoolean_A05", anyDexVm())
+          .put("lang.reflect.Field.setByteLjava_lang_ObjectB.Field_setByte_A05", anyDexVm())
+          .put("lang.reflect.Field.setByteLjava_lang_ObjectB.Field_setByte_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setByteLjava_lang_ObjectB.Field_setByte_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.setBooleanLjava_lang_ObjectZ.Field_setBoolean_A01", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.setBooleanLjava_lang_ObjectZ.Field_setBoolean_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setBooleanLjava_lang_ObjectZ.Field_setBoolean_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.setCharLjava_lang_ObjectC.Field_setChar_A05", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.setCharLjava_lang_ObjectC.Field_setChar_A05", anyDexVm())
           .put("lang.reflect.Field.isSynthetic.Field_isSynthetic_A01", any())
-          .put("lang.reflect.Field.setBooleanLjava_lang_ObjectZ.Field_setBoolean_A05", any())
-          .put("lang.reflect.Field.getType.Field_getType_A01", any())
-          .put("lang.reflect.Field.setCharLjava_lang_ObjectC.Field_setChar_A01", any())
+          .put("lang.reflect.Field.setBooleanLjava_lang_ObjectZ.Field_setBoolean_A05", anyDexVm())
+          .put("lang.reflect.Field.getType.Field_getType_A01", anyDexVm())
+          .put("lang.reflect.Field.setCharLjava_lang_ObjectC.Field_setChar_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setCharLjava_lang_ObjectC.Field_setChar_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.getDoubleLjava_lang_Object.Field_getDouble_A05", any())
-          .put("lang.reflect.Field.setFloatLjava_lang_ObjectF.Field_setFloat_A01", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.getDoubleLjava_lang_Object.Field_getDouble_A05", anyDexVm())
+          .put("lang.reflect.Field.setFloatLjava_lang_ObjectF.Field_setFloat_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setFloatLjava_lang_ObjectF.Field_setFloat_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
           .put("lang.reflect.Field.getAnnotationLjava_lang_Class.Field_getAnnotation_A01", any())
           .put(
               "lang.reflect.Field.setIntLjava_lang_ObjectI.Field_setInt_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.getIntLjava_lang_Object.Field_getInt_A05", any())
-          .put("lang.reflect.Field.setFloatLjava_lang_ObjectF.Field_setFloat_A05", any())
-          .put("lang.reflect.Field.getShortLjava_lang_Object.Field_getShort_A05", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.getIntLjava_lang_Object.Field_getInt_A05", anyDexVm())
+          .put("lang.reflect.Field.setFloatLjava_lang_ObjectF.Field_setFloat_A05", anyDexVm())
+          .put("lang.reflect.Field.getShortLjava_lang_Object.Field_getShort_A05", anyDexVm())
           .put("lang.reflect.Field.getGenericType.Field_getGenericType_A03", any())
           .put("lang.reflect.Field.getDeclaredAnnotations.Field_getDeclaredAnnotations_A01", any())
-          .put("lang.reflect.Field.getGenericType.Field_getGenericType_A01", any())
-          .put("lang.reflect.Field.setIntLjava_lang_ObjectI.Field_setInt_A05", any())
+          .put("lang.reflect.Field.getGenericType.Field_getGenericType_A01", anyDexVm())
+          .put("lang.reflect.Field.setIntLjava_lang_ObjectI.Field_setInt_A05", anyDexVm())
           .put("lang.reflect.Field.getGenericType.Field_getGenericType_A02", any())
-          .put("lang.reflect.Field.toGenericString.Field_toGenericString_A01", any())
+          .put("lang.reflect.Field.toGenericString.Field_toGenericString_A01", anyDexVm())
           .put("lang.reflect.Field.getGenericType.Field_getGenericType_A04", any())
-          .put("lang.reflect.Field.setIntLjava_lang_ObjectI.Field_setInt_A01", any())
+          .put("lang.reflect.Field.setIntLjava_lang_ObjectI.Field_setInt_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setDoubleLjava_lang_ObjectD.Field_setDouble_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.setDoubleLjava_lang_ObjectD.Field_setDouble_A05", any())
-          .put("lang.reflect.Field.setShortLjava_lang_ObjectS.Field_setShort_A01", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.setDoubleLjava_lang_ObjectD.Field_setDouble_A05", anyDexVm())
+          .put("lang.reflect.Field.setShortLjava_lang_ObjectS.Field_setShort_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setLongLjava_lang_ObjectJ.Field_setLong_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.setLongLjava_lang_ObjectJ.Field_setLong_A05", any())
-          .put("lang.reflect.Field.setLongLjava_lang_ObjectJ.Field_setLong_A01", any())
-          .put("lang.reflect.Field.setDoubleLjava_lang_ObjectD.Field_setDouble_A01", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.setLongLjava_lang_ObjectJ.Field_setLong_A05", anyDexVm())
+          .put("lang.reflect.Field.setLongLjava_lang_ObjectJ.Field_setLong_A01", anyDexVm())
+          .put("lang.reflect.Field.setDoubleLjava_lang_ObjectD.Field_setDouble_A01", anyDexVm())
           .put(
               "lang.reflect.Field.setShortLjava_lang_ObjectS.Field_setShort_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.setShortLjava_lang_ObjectS.Field_setShort_A05", any())
-          .put("lang.reflect.Field.getLjava_lang_Object.Field_get_A05", any())
-          .put("lang.reflect.Field.getLongLjava_lang_Object.Field_getLong_A05", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.setShortLjava_lang_ObjectS.Field_setShort_A05", anyDexVm())
+          .put("lang.reflect.Field.getLjava_lang_Object.Field_get_A05", anyDexVm())
+          .put("lang.reflect.Field.getLongLjava_lang_Object.Field_getLong_A05", anyDexVm())
           .put(
               "lang.reflect.Field.setLjava_lang_ObjectLjava_lang_Object.Field_set_A02",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.reflect.Field.setLjava_lang_ObjectLjava_lang_Object.Field_set_A05", any())
-          .put("lang.reflect.Field.setLjava_lang_ObjectLjava_lang_Object.Field_set_A01", any())
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.reflect.Field.setLjava_lang_ObjectLjava_lang_Object.Field_set_A05", anyDexVm())
+          .put("lang.reflect.Field.setLjava_lang_ObjectLjava_lang_Object.Field_set_A01", anyDexVm())
           .put(
               "lang.reflect.Constructor.newInstance_Ljava_lang_Object.Constructor_newInstance_A06",
-              any())
+              anyDexVm())
           .put("lang.reflect.Constructor.isSynthetic.Constructor_isSynthetic_A01", any())
           .put(
               "lang.reflect.Constructor.getGenericExceptionTypes.Constructor_getGenericExceptionTypes_A03",
@@ -1101,8 +1296,10 @@
               any())
           .put(
               "lang.reflect.InvocationTargetException.serialization.InvocationTargetException_serialization_A01",
-              any())
-          .put("lang.reflect.Constructor.toGenericString.Constructor_toGenericString_A01", any())
+              anyDexVm())
+          .put(
+              "lang.reflect.Constructor.toGenericString.Constructor_toGenericString_A01",
+              anyDexVm())
           .put(
               "lang.reflect.Constructor.getTypeParameters.Constructor_getTypeParameters_A02", any())
           .put(
@@ -1116,22 +1313,22 @@
               any())
           .put(
               "lang.reflect.AccessibleObject.setAccessibleZ.AccessibleObject_setAccessible_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.UndeclaredThrowableException.serialization.UndeclaredThrowableException_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.AccessibleObject.setAccessibleZ.AccessibleObject_setAccessible_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.AccessibleObject.setAccessible_Ljava_lang_reflect_AccessibleObjectZ.AccessibleObject_setAccessible_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.AccessibleObject.isAnnotationPresentLjava_lang_Class.AccessibleObject_isAnnotationPresent_A01",
               any())
           .put(
               "lang.reflect.AccessibleObject.setAccessible_Ljava_lang_reflect_AccessibleObjectZ.AccessibleObject_setAccessible_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.reflect.AccessibleObject.getAnnotations.AccessibleObject_getAnnotations_A01",
               any())
@@ -1143,453 +1340,472 @@
               any())
           .put(
               "lang.IllegalAccessException.serialization.IllegalAccessException_serialization_A01",
-              any())
+              anyDexVm())
           .put("lang.Character.getTypeI.Character_getType_A01", any())
           .put("lang.Character.isDigitI.Character_isDigit_A01", any())
           .put("lang.Character.getTypeC.Character_getType_A01", any())
-          .put("lang.Character.serialization.Character_serialization_A01", any())
+          .put("lang.Character.serialization.Character_serialization_A01", anyDexVm())
           .put("lang.Character.isDigitC.Character_isDigit_A01", any())
           .put("lang.Character.digitCI.Character_digit_A01", any())
           .put("lang.Character.digitII.Character_digit_A01", any())
-          .put("lang.Character.isLowerCaseC.Character_isLowerCase_A01", any())
+          .put("lang.Character.isLowerCaseC.Character_isLowerCase_A01", anyDexVm())
           .put(
               "lang.Character.isSpaceCharC.Character_isSpaceChar_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.Character.isSpaceCharI.Character_isSpaceChar_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.Character.isWhitespaceC.Character_isWhitespace_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.Character.isWhitespaceI.Character_isWhitespace_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put("lang.Character.getDirectionalityI.Character_getDirectionality_A01", any())
-          .put(
-              "lang.Character.UnicodeBlock.ofC.UnicodeBlock_of_A01",
-              match(runtimesFrom(Version.V4_4_4)))
-          .put(
-              "lang.Character.UnicodeBlock.ofI.UnicodeBlock_of_A01",
-              match(runtimesFrom(Version.V4_4_4)))
-          .put("lang.Character.isLowerCaseI.Character_isLowerCase_A01", any())
-          .put("lang.Process.waitFor.Process_waitFor_A01", any())
-          .put("lang.System.getProperties.System_getProperties_A01", any())
-          .put("lang.Process.getErrorStream.Process_getErrorStream_A01", any())
+          .put("lang.Character.UnicodeBlock.ofC.UnicodeBlock_of_A01", any())
+          .put("lang.Character.UnicodeBlock.ofI.UnicodeBlock_of_A01", any())
+          .put("lang.Character.isLowerCaseI.Character_isLowerCase_A01", anyDexVm())
+          .put("lang.Process.waitFor.Process_waitFor_A01", anyDexVm())
+          .put("lang.System.getProperties.System_getProperties_A01", anyDexVm())
+          .put("lang.Process.getErrorStream.Process_getErrorStream_A01", anyDexVm())
           .put("lang.Character.getDirectionalityC.Character_getDirectionality_A01", any())
-          .put("lang.Process.exitValue.Process_exitValue_A01", any())
-          .put("lang.System.loadLjava_lang_String.System_load_A01", any())
-          .put("lang.Process.getInputStream.Process_getInputStream_A01", any())
-          .put("lang.System.loadLibraryLjava_lang_String.System_loadLibrary_A01", any())
+          .put("lang.Process.exitValue.Process_exitValue_A01", anyDexVm())
+          .put("lang.System.loadLjava_lang_String.System_load_A01", anyDexVm())
+          .put("lang.Process.getInputStream.Process_getInputStream_A01", anyDexVm())
+          .put("lang.System.loadLibraryLjava_lang_String.System_loadLibrary_A01", anyDexVm())
           .put(
               "lang.System.setSecurityManagerLjava_lang_SecurityManager.System_setSecurityManager_A02",
-              any())
-          .put("lang.System.runFinalizersOnExitZ.System_runFinalizersOnExit_A01", any())
-          .put("lang.System.getenvLjava_lang_String.System_getenv_A01", any())
-          .put("lang.System.getenv.System_getenv_A01", any())
+              anyDexVm())
+          .put("lang.System.runFinalizersOnExitZ.System_runFinalizersOnExit_A01", anyDexVm())
+          .put("lang.System.getenvLjava_lang_String.System_getenv_A01", anyDexVm())
+          .put("lang.System.getenv.System_getenv_A01", anyDexVm())
           .put(
               "lang.System.getPropertyLjava_lang_StringLjava_lang_String.System_getProperty_A01",
-              any())
-          .put("lang.System.exitI.System_exit_A01", any())
+              anyDexVm())
+          .put("lang.System.exitI.System_exit_A01", anyDexVm())
           .put(
               "util.concurrent.ArrayBlockingQueue.serialization.ArrayBlockingQueue_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.System.arraycopyLjava_lang_ObjectILjava_lang_ObjectII.System_arraycopy_A04",
-              any())
-          .put("lang.System.setPropertiesLjava_util_Properties.System_setProperties_A02", any())
-          .put("lang.System.clearPropertyLjava_lang_String.System_clearProperty_A02", any())
-          .put("lang.System.getPropertyLjava_lang_String.System_getProperty_A01", any())
+              anyDexVm())
+          .put(
+              "lang.System.setPropertiesLjava_util_Properties.System_setProperties_A02", anyDexVm())
+          .put("lang.System.clearPropertyLjava_lang_String.System_clearProperty_A02", anyDexVm())
+          .put("lang.System.getPropertyLjava_lang_String.System_getProperty_A01", anyDexVm())
           .put(
               "util.concurrent.LinkedBlockingQueue.serialization.LinkedBlockingQueue_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.LinkedBlockingDeque.serialization.LinkedBlockingDeque_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.ConcurrentLinkedQueue.serialization.ConcurrentLinkedQueue_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.SynchronousQueue.serialization.SynchronousQueue_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.CopyOnWriteArrayList.serialization.CopyOnWriteArrayList_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.CopyOnWriteArrayList.subListII.CopyOnWriteArrayList_subList_A01",
               any())
           .put(
               "util.concurrent.ConcurrentHashMap.serialization.ConcurrentHashMap_serialization_A01",
-              match(runtimesFrom(Version.V5_1_1)))
-          .put("util.concurrent.ConcurrentHashMap.keySet.ConcurrentHashMap_keySet_A01", any())
+              match(TestCondition.artRuntimesFrom(Runtime.ART_V5_1_1)))
+          .put("util.concurrent.ConcurrentHashMap.keySet.ConcurrentHashMap_keySet_A01", anyDexVm())
           .put(
               "util.concurrent.Executors.privilegedThreadFactory.Executors_privilegedThreadFactory_A01",
               any())
           .put(
               "util.concurrent.Executors.privilegedCallableLjava_util_concurrent_Callable.Executors_privilegedCallable_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.CopyOnWriteArraySet.serialization.CopyOnWriteArraySet_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.Executors.privilegedCallableUsingCurrentClassLoaderLjava_util_concurrent_Callable.Executors_privilegedCallableUsingCurrentClassLoader_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.PriorityBlockingQueue.ConstructorLjava_util_Collection.PriorityBlockingQueue_Constructor_A01",
               any())
           .put(
               "util.concurrent.PriorityBlockingQueue.serialization.PriorityBlockingQueue_serialization_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.ThreadGroup.destroy.ThreadGroup_destroy_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Thread.start.Thread_start_A01", match(runtimes(Version.V7_0_0)))
+              match(artRuntimesUpToAndJava(Runtime.ART_V6_0_1)))
+          .put("lang.Thread.start.Thread_start_A01", match(runtimes(Runtime.ART_V7_0_0)))
           .put(
               "lang.String.getBytesLjava_lang_String.String_getBytes_A02",
-              match(runtimesUpTo(Version.V7_0_0)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V7_0_0)))
           .put(
               "util.concurrent.CopyOnWriteArrayList.lastIndexOfLjava_lang_ObjectI.CopyOnWriteArrayList_lastIndexOf_A02",
-              match(runtimesUpTo(Version.V7_0_0)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V7_0_0)))
           .put(
               "util.concurrent.CopyOnWriteArrayList.lastIndexOfLjava_lang_ObjectI.CopyOnWriteArrayList_lastIndexOf_A01",
-              match(runtimesUpTo(Version.V7_0_0)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V7_0_0)))
           .put(
               "lang.StringBuffer.getCharsII_CI.StringBuffer_getChars_A03",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.StringBuffer.appendF.StringBuffer_append_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.StringBuffer.insertI_CII.StringBuffer_insert_A02",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.StrictMath.scalbDI.StrictMath_scalb_A03", match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.StrictMath.scalbDI.StrictMath_scalb_A01", match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.StrictMath.scalbFI.StrictMath_scalb_A03", match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.StrictMath.scalbFI.StrictMath_scalb_A01", match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.StrictMath.scalbDI.StrictMath_scalb_A03",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.StrictMath.scalbDI.StrictMath_scalb_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.StrictMath.scalbFI.StrictMath_scalb_A03",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.StrictMath.scalbFI.StrictMath_scalb_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_StringJ.Thread_Constructor_A07",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_String.Thread_Constructor_A07",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Thread.toString.Thread_toString_A01", match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Thread.start.Thread_start_A02", match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.Thread.toString.Thread_toString_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.Thread.start.Thread_start_A02",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.Thread.setPriorityI.Thread_setPriority_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ClassLoader.ConstructorLjava_lang_ClassLoader.ClassLoader_Constructor_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.Enum.compareToLjava_lang_Enum.Enum_compareTo_A03",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Enum.hashCode.Enum_hashCode_A01", match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.Enum.hashCode.Enum_hashCode_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.StackTraceElement.hashCode.StackTraceElement_hashCode_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ProcessBuilder.environment.ProcessBuilder_environment_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ProcessBuilder.environment.ProcessBuilder_environment_A03",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Float.toStringF.Float_toString_A04", match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Float.toStringF.Float_toString_A03", match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.Float.toStringF.Float_toString_A04",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.Float.toStringF.Float_toString_A03",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ThreadGroup.getMaxPriority.ThreadGroup_getMaxPriority_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ThreadGroup.uncaughtExceptionLjava_lang_ThreadLjava_lang_Throwable.ThreadGroup_uncaughtException_A02",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.ThreadGroup.list.ThreadGroup_list_A01", match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.ThreadGroup.list.ThreadGroup_list_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A04",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.ThreadGroup.toString.ThreadGroup_toString_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.Class.getFieldLjava_lang_String.Class_getField_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.String.replaceCC.String_replace_A01", match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.String.replaceCC.String_replace_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.Package.isCompatibleWithLjava_lang_String.Package_isCompatibleWith_A02",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.StringBuilder.appendF.StringBuilder_append_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.StringBuilder.insertIF.StringBuilder_insert_A01",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.reflect.AccessibleObject.setAccessibleZ.AccessibleObject_setAccessible_A04",
-              match(runtimesUpTo(Version.V4_4_4)))
+              match(runtimes(Runtime.ART_V4_4_4, Runtime.JAVA)))
           .put(
               "lang.reflect.AccessibleObject.setAccessible_Ljava_lang_reflect_AccessibleObjectZ.AccessibleObject_setAccessible_A04",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(artRuntimesUpToAndJava(Runtime.ART_V6_0_1)))
           .put(
               "lang.Character.UnicodeBlock.forName_java_lang_String.UnicodeBlock_forName_A03",
-              match(runtimesUpTo(Version.V6_0_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
           .put(
               "lang.System.loadLjava_lang_String.System_load_A02",
-              match(runtimesUpTo(Version.V6_0_1)))
-          .put("lang.Math.hypotDD.Math_hypot_A04", match(runtimesUpTo(Version.V5_1_1)))
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V6_0_1)))
+          .put(
+              "lang.Math.hypotDD.Math_hypot_A04",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V5_1_1)))
           .put(
               "math.BigInteger.probablePrimeIjava_util_Random.BigInteger_probablePrime_A01",
-              match(runtimes(Version.V4_0_4)))
-          .put("lang.Math.sqrtD.Math_sqrt_A01", match(runtimes(Version.V4_0_4)))
-          .put("lang.StrictMath.cbrtD.StrictMath_cbrt_A01", match(runtimes(Version.V4_0_4)))
-          .put("lang.StrictMath.log10D.StrictMath_log10_A01", match(runtimes(Version.V4_0_4)))
-          .put("lang.StrictMath.powDD.StrictMath_pow_A01", match(runtimes(Version.V4_0_4)))
-          .put("lang.String.indexOfII.String_indexOf_A01", match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
+          .put("lang.Math.sqrtD.Math_sqrt_A01", match(runtimes(Runtime.ART_V4_0_4)))
+          .put("lang.StrictMath.cbrtD.StrictMath_cbrt_A01", match(runtimes(Runtime.ART_V4_0_4)))
+          .put("lang.StrictMath.log10D.StrictMath_log10_A01", match(runtimes(Runtime.ART_V4_0_4)))
+          .put(
+              "lang.StrictMath.powDD.StrictMath_pow_A01",
+              match(runtimes(Runtime.ART_V4_0_4, Runtime.JAVA)))
+          .put("lang.String.indexOfII.String_indexOf_A01", match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.String.indexOfLjava_lang_StringI.String_indexOf_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getByteLjava_lang_ObjectI.Array_getByte_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getDoubleLjava_lang_ObjectI.Array_getDouble_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getDoubleLjava_lang_ObjectI.Array_getDouble_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getFloatLjava_lang_ObjectI.Array_getFloat_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getFloatLjava_lang_ObjectI.Array_getFloat_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getIntLjava_lang_ObjectI.Array_getInt_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getIntLjava_lang_ObjectI.Array_getInt_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getLongLjava_lang_ObjectI.Array_getLong_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getLongLjava_lang_ObjectI.Array_getLong_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.getShortLjava_lang_ObjectI.Array_getShort_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.setBooleanLjava_lang_ObjectIZ.Array_setBoolean_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.setCharLjava_lang_ObjectIC.Array_setChar_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.setLjava_lang_ObjectILjava_lang_Object.Array_set_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Array.setLjava_lang_ObjectILjava_lang_Object.Array_set_A03",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "lang.reflect.Constructor.toString.Constructor_toString_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "math.BigInteger.modPowLjava_math_BigIntegerLjava_math_Integer.BigInteger_modPow_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "util.concurrent.LinkedBlockingDeque.drainToLjava_util_CollectionI.LinkedBlockingDeque_drainTo_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
           .put(
               "util.concurrent.LinkedBlockingQueue.drainToLjava_util_CollectionI.LinkedBlockingQueue_drainTo_A01",
-              match(runtimes(Version.V4_0_4)))
+              match(runtimes(Runtime.ART_V4_0_4)))
+          .put(
+              "lang.Thread.stopLjava_lang_Throwable.Thread_stop_A02", match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.AssertionError.ConstructorLjava_lang_Object.AssertionError_Constructor_A01",
+              match(runtimes(Runtime.ART_V4_0_4)))
+          .put(
+              "lang.RuntimePermission.Class.RuntimePermission_class_A13",
+              match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.Thread.stopLjava_lang_Throwable.Thread_stop_A01", match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.Runtime.addShutdownHookLjava_lang_Thread.Runtime_addShutdownHook_A02",
+              match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.ref.PhantomReference.clear.PhantomReference_clear_A01",
+              match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.ref.WeakReference.isEnqueued.WeakReference_isEnqueued_A01",
+              match(runtimes(Runtime.JAVA)))
+          .put("lang.ThreadGroup.destroy.ThreadGroup_destroy_A04", match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A02",
+              match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.String.replaceFirstLjava_lang_StringLjava_lang_String.String_replaceFirst_A01",
+              match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.String.replaceAllLjava_lang_StringLjava_lang_String.String_replaceAll_A01",
+              match(runtimes(Runtime.JAVA)))
+          .put(
+              "lang.System.inheritedChannel.System_inheritedChannel_A01",
+              match(runtimes(Runtime.JAVA)))
           .build(); // end of failuresToTriage
 
-  public static final Multimap<String, TestCondition> flakyWithArt =
+  public static final Multimap<String, TestCondition> flakyWhenRun =
       new ImmutableListMultimap.Builder<String, TestCondition>()
-
-          .put("lang.Object.notifyAll.Object_notifyAll_A03", any())
-
-
-
-          .put("lang.Object.notify.Object_notify_A03", any())
-
-
-
+          .put("lang.Object.notifyAll.Object_notifyAll_A03", anyDexVm())
+          .put("lang.Object.notify.Object_notify_A03", anyDexVm())
           .put(
               "util.concurrent.ConcurrentSkipListSet.addLjava_lang_Object.ConcurrentSkipListSet_add_A01",
               any())
-
-
-
-          .put("util.concurrent.SynchronousQueue.ConstructorZ", any())
-
-
-
-
-          .put("lang.Thread.interrupt.Thread_interrupt_A04", any())
-
-
-
-
-          .put("util.concurrent.SynchronousQueue.ConstructorZ.SynchronousQueue_Constructor_A01",
-              any())
-
-
-
-
-          .put("lang.Thread.getState.Thread_getState_A01", any())
-
-
-
-
+          .put("util.concurrent.SynchronousQueue.ConstructorZ", anyDexVm())
+          .put("lang.Thread.interrupt.Thread_interrupt_A04", anyDexVm())
+          .put(
+              "util.concurrent.SynchronousQueue.ConstructorZ.SynchronousQueue_Constructor_A01",
+              anyDexVm())
+          .put("lang.Thread.getState.Thread_getState_A01", anyDexVm())
           .put(
               "util.concurrent.ScheduledThreadPoolExecutor.getTaskCount.ScheduledThreadPoolExecutor_getTaskCount_A01",
               any())
+          .put(
+              "lang.ref.PhantomReference.clear.PhantomReference_clear_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.ref.SoftReference.clear.SoftReference_clear_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.ref.WeakReference.clear.WeakReference_clear_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.ref.PhantomReference.isEnqueued.PhantomReference_isEnqueued_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.ref.WeakReference.isEnqueued.WeakReference_isEnqueued_A01", anyDexVm())
+          .put(
+              "lang.ref.WeakReference.enqueue.WeakReference_enqueue_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.ref.SoftReference.isEnqueued.SoftReference_isEnqueued_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.ref.SoftReference.enqueue.SoftReference_enqueue_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put(
+              "lang.ref.ReferenceQueue.poll.ReferenceQueue_poll_A01",
+              match(TestCondition.artRuntimesUpTo(Runtime.ART_V4_4_4)))
+          .put("lang.Runtime.gc.Runtime_gc_A01", match(runtimes(Runtime.JAVA)))
+          .build(); // end of flakyWhenRun
 
-
-
-          .put("lang.ref.PhantomReference.clear.PhantomReference_clear_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.ref.SoftReference.clear.SoftReference_clear_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-          .put("lang.ref.WeakReference.clear.WeakReference_clear_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-
-
-          .put("lang.ref.PhantomReference.isEnqueued.PhantomReference_isEnqueued_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-
-          .put("lang.ref.WeakReference.isEnqueued.WeakReference_isEnqueued_A01", any())
-
-
-
-          .put("lang.ref.WeakReference.enqueue.WeakReference_enqueue_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-
-
-
-          .put("lang.ref.SoftReference.isEnqueued.SoftReference_isEnqueued_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-
-
-          .put("lang.ref.SoftReference.enqueue.SoftReference_enqueue_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-
-
-
-          .put("lang.ref.ReferenceQueue.poll.ReferenceQueue_poll_A01",
-              match(runtimesUpTo(Version.V4_4_4)))
-
-
-          .put("lang.AssertionError.ConstructorLjava_lang_Object.AssertionError_Constructor_A01",
-              match(runtimes(Version.V4_0_4)))
-
-
-
-
-          .build(); // end of flakyWithArt
-
-  public static final Multimap<String, TestCondition> timeoutsWithArt =
+  public static final Multimap<String, TestCondition> timeoutsWhenRun =
       new ImmutableListMultimap.Builder<String, TestCondition>()
-          .put("lang.Thread.interrupt.Thread_interrupt_A01", any())
-          .put("lang.Thread.resume.Thread_resume_A01", any())
-          .put("lang.Thread.stop.Thread_stop_A01", any())
-          .put("lang.Thread.suspend.Thread_suspend_A01", any())
+          .put("lang.Thread.interrupt.Thread_interrupt_A01", anyDexVm())
+          .put("lang.Thread.resume.Thread_resume_A01", anyDexVm())
+          .put("lang.Thread.stop.Thread_stop_A01", anyDexVm())
+          .put("lang.Thread.suspend.Thread_suspend_A01", anyDexVm())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_StringJ.Thread_Constructor_A04",
-              any())
+              anyDexVm())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_StringJ.Thread_Constructor_A03",
-              any())
+              anyDexVm())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_StringJ.Thread_Constructor_A05",
-              any())
-          .put("lang.Thread.setNameLjava_lang_String.Thread_setName_A02", any())
-          .put("lang.Thread.stop.Thread_stop_A02", any())
+              anyDexVm())
+          .put("lang.Thread.setNameLjava_lang_String.Thread_setName_A02", anyDexVm())
+          .put("lang.Thread.stop.Thread_stop_A02", anyDexVm())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_String.Thread_Constructor_A02",
-              any())
+              anyDexVm())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_String.Thread_Constructor_A03",
-              any())
-          .put("lang.Thread.getStackTrace.Thread_getStackTrace_A03", any())
+              anyDexVm())
+          .put("lang.Thread.getStackTrace.Thread_getStackTrace_A03", anyDexVm())
           .put(
               "lang.Thread.setDefaultUncaughtExceptionHandler.Thread_setDefaultUncaughtExceptionHandler_A02",
-              any())
-          .put("lang.Thread.checkAccess.Thread_checkAccess_A01", any())
+              anyDexVm())
+          .put("lang.Thread.checkAccess.Thread_checkAccess_A01", anyDexVm())
           .put(
               "lang.Thread.ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_String.Thread_Constructor_A04",
-              any())
-          .put("lang.Thread.setUncaughtExceptionHandler.Thread_setUncaughtExceptionHandler_A02",
-              any())
-          .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A01", any())
-          .put("lang.Thread.getAllStackTraces.Thread_getAllStackTraces_A02", any())
+              anyDexVm())
+          .put(
+              "lang.Thread.setUncaughtExceptionHandler.Thread_setUncaughtExceptionHandler_A02",
+              anyDexVm())
+          .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A01", anyDexVm())
+          .put("lang.Thread.getAllStackTraces.Thread_getAllStackTraces_A02", anyDexVm())
           .put(
               "lang.Thread.setContextClassLoaderLjava_lang_ClassLoader.Thread_setContextClassLoader_A02",
-              any())
-          .put("lang.Thread.setPriorityI.Thread_setPriority_A02", any())
-          .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A02", any())
-          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A04",
-              any())
-          .put("lang.Thread.getContextClassLoader.Thread_getContextClassLoader_A02", any())
-          .put("lang.ThreadGroup.suspend.ThreadGroup_suspend_A02", any())
-          .put("lang.Thread.setDaemonZ.Thread_setDaemon_A03", any())
-          .put("lang.ProcessBuilder.environment.ProcessBuilder_environment_A07", any())
+              anyDexVm())
+          .put("lang.Thread.setPriorityI.Thread_setPriority_A02", anyDexVm())
+          .put("lang.Thread.stopLjava_lang_Throwable.Thread_stop_A02", anyDexVm())
+          .put(
+              "lang.Runtime.execLjava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A04",
+              anyDexVm())
+          .put("lang.Thread.getContextClassLoader.Thread_getContextClassLoader_A02", anyDexVm())
+          .put("lang.ThreadGroup.suspend.ThreadGroup_suspend_A02", anyDexVm())
+          .put("lang.Thread.setDaemonZ.Thread_setDaemon_A03", anyDexVm())
+          .put("lang.ProcessBuilder.environment.ProcessBuilder_environment_A07", anyDexVm())
           .put(
               "lang.Runtime.exec_Ljava_lang_String_Ljava_lang_StringLjava_io_File.Runtime_exec_A04",
-              any())
-          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A04", any())
-          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A04", any())
-          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A04", any())
-          .put("lang.System.clearPropertyLjava_lang_String.System_clearProperty_A03", any())
-          .put("lang.System.getSecurityManager.System_getSecurityManager_A01", any())
-          .put("lang.System.setInLjava_io_InputStream.System_setIn_A02", any())
-          .put("lang.System.setOutLjava_io_PrintStream.System_setOut_A02", any())
-          .put("lang.ThreadGroup.destroy.ThreadGroup_destroy_A04", any())
-          .put("lang.ThreadGroup.enumerate_ThreadGroupZ.ThreadGroup_enumerate_A03", any())
-          .put("lang.ThreadGroup.enumerate_Thread.ThreadGroup_enumerate_A03", any())
-          .put("lang.ThreadGroup.enumerate_ThreadZ.ThreadGroup_enumerate_A03", any())
-          .put("lang.ThreadGroup.interrupt.ThreadGroup_interrupt_A02", any())
-          .put("lang.ThreadGroup.resume.ThreadGroup_resume_A02", any())
-          .put("lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A02", any())
-          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A04", any())
-          .put("lang.System.getenvLjava_lang_String.System_getenv_A03", any())
-          .put("lang.System.setPropertyLjava_lang_StringLjava_lang_String.System_setProperty_A02",
-              any())
-          .put("lang.ThreadGroup.enumerate_ThreadGroup.ThreadGroup_enumerate_A03", any())
-          .put("lang.ThreadGroup.getParent.ThreadGroup_getParent_A02", any())
-          .put("lang.ThreadGroup.setDaemonZ.ThreadGroup_setDaemon_A02", any())
-          .put("lang.ThreadGroup.stop.ThreadGroup_stop_A02", any())
-          .put("lang.Class.getSuperclass.Class_getSuperclass_A01", any())
-          .put("lang.System.getenv.System_getenv_A03", any())
-          .put("lang.System.inheritedChannel.System_inheritedChannel_A01", any())
+              anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String_Ljava_lang_String.Runtime_exec_A04", anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String.Runtime_exec_A04", anyDexVm())
+          .put("lang.Runtime.execLjava_lang_String.Runtime_exec_A04", anyDexVm())
+          .put("lang.System.clearPropertyLjava_lang_String.System_clearProperty_A03", anyDexVm())
+          .put("lang.System.getSecurityManager.System_getSecurityManager_A01", anyDexVm())
+          .put("lang.System.setInLjava_io_InputStream.System_setIn_A02", anyDexVm())
+          .put("lang.System.setOutLjava_io_PrintStream.System_setOut_A02", anyDexVm())
+          .put("lang.ThreadGroup.destroy.ThreadGroup_destroy_A04", anyDexVm())
+          .put("lang.ThreadGroup.enumerate_ThreadGroupZ.ThreadGroup_enumerate_A03", anyDexVm())
+          .put("lang.ThreadGroup.enumerate_Thread.ThreadGroup_enumerate_A03", anyDexVm())
+          .put("lang.ThreadGroup.enumerate_ThreadZ.ThreadGroup_enumerate_A03", anyDexVm())
+          .put("lang.ThreadGroup.interrupt.ThreadGroup_interrupt_A02", anyDexVm())
+          .put("lang.ThreadGroup.resume.ThreadGroup_resume_A02", anyDexVm())
+          .put("lang.ThreadGroup.setMaxPriorityI.ThreadGroup_setMaxPriority_A02", anyDexVm())
+          .put("lang.Runtime.exec_Ljava_lang_String_Ljava_lang_String.Runtime_exec_A04", anyDexVm())
+          .put("lang.System.getenvLjava_lang_String.System_getenv_A03", anyDexVm())
+          .put(
+              "lang.System.setPropertyLjava_lang_StringLjava_lang_String.System_setProperty_A02",
+              anyDexVm())
+          .put("lang.ThreadGroup.enumerate_ThreadGroup.ThreadGroup_enumerate_A03", anyDexVm())
+          .put("lang.ThreadGroup.getParent.ThreadGroup_getParent_A02", anyDexVm())
+          .put("lang.ThreadGroup.setDaemonZ.ThreadGroup_setDaemon_A02", anyDexVm())
+          .put("lang.ThreadGroup.stop.ThreadGroup_stop_A02", anyDexVm())
+          .put("lang.Class.getSuperclass.Class_getSuperclass_A01", anyDexVm())
+          .put("lang.System.getenv.System_getenv_A03", anyDexVm())
+          .put("lang.System.inheritedChannel.System_inheritedChannel_A01", anyDexVm())
           .put(
               "util.concurrent.ArrayBlockingQueue.containsLjava_lang_Object.ArrayBlockingQueue_contains_A01",
-              any())
-          .put("lang.System.arraycopyLjava_lang_ObjectILjava_lang_ObjectII.System_arraycopy_A03",
-              any())
-          .put("lang.System.setErrLjava_io_PrintStream.System_setErr_A02", any())
+              anyDexVm())
+          .put(
+              "lang.System.arraycopyLjava_lang_ObjectILjava_lang_ObjectII.System_arraycopy_A03",
+              anyDexVm())
+          .put("lang.System.setErrLjava_io_PrintStream.System_setErr_A02", anyDexVm())
           .put(
               "util.concurrent.ArrayBlockingQueue.containsLjava_lang_Object.ArrayBlockingQueue_contains_A01",
-              any())
+              anyDexVm())
           .put(
               "lang.System.setSecurityManagerLjava_lang_SecurityManager.System_setSecurityManager_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.ArrayBlockingQueue.containsLjava_lang_Object.ArrayBlockingQueue_contains_A01",
-              any())
+              anyDexVm())
           .put(
               "util.concurrent.ArrayBlockingQueue.containsLjava_lang_Object.ArrayBlockingQueue_contains_A01",
-              any())
-          .put("lang.System.setPropertiesLjava_util_Properties.System_setProperties_A01", any())
+              anyDexVm())
+          .put(
+              "lang.System.setPropertiesLjava_util_Properties.System_setProperties_A01", anyDexVm())
           .put(
               "util.concurrent.CopyOnWriteArrayList.ConstructorLjava_util_Collection.CopyOnWriteArrayList_Constructor_A02",
-              any())
+              anyDexVm())
           .put("util.concurrent.CyclicBarrier.reset.CyclicBarrier_reset_A03", any())
-          .put("lang.System.clearPropertyLjava_lang_String.System_clearProperty_A01", any())
-          .put("lang.System.getenv.System_getenv_A04", any())
-          .put("lang.RuntimePermission.Class.RuntimePermission_class_A02", any())
-          .put("lang.RuntimePermission.Class.RuntimePermission_class_A13", any())
-          .build(); // end of timeoutsWithArt
+          .put("lang.System.clearPropertyLjava_lang_String.System_clearProperty_A01", anyDexVm())
+          .put("lang.System.getenv.System_getenv_A04", anyDexVm())
+          .put("lang.RuntimePermission.Class.RuntimePermission_class_A02", anyDexVm())
+          .put("lang.RuntimePermission.Class.RuntimePermission_class_A13", anyDexVm())
+          .build(); // end of timeoutsWhenRun
 
   public static final Multimap<String, TestCondition> requiresInliningDisabled =
       new ImmutableListMultimap.Builder<String, TestCondition>()
@@ -1605,15 +1821,18 @@
           .put("lang.Thread.dumpStack.Thread_dumpStack_A01", match(R8_COMPILER))
           .build();
 
+  public static final Set<String> compilationFailsWithAsmMethodTooLarge =
+      ImmutableSet.of("lang.StrictMath.powDD.StrictMath_pow_A01");
+
   private static final boolean testMatch(
       Multimap<String, TestCondition> testConditions,
       String name,
       CompilerUnderTest compilerUnderTest,
-      DexVm dexVm,
+      Runtime runtime,
       CompilationMode compilationMode) {
     Collection<TestCondition> entries = testConditions.get(name);
     for (TestCondition entry : entries) {
-      if (entry.test(DexTool.NONE, compilerUnderTest, dexVm.getVersion(), compilationMode)) {
+      if (entry.test(DexTool.NONE, compilerUnderTest, runtime, compilationMode)) {
         return true;
       }
     }
@@ -1623,28 +1842,28 @@
   public static final <T> T getExpectedOutcome(
       String name,
       CompilerUnderTest compilerUnderTest,
-      DexVm dexVm,
+      Runtime runtime,
       CompilationMode compilationMode,
       BiFunction<Outcome, Boolean, T> consumer) {
 
     Outcome outcome = null;
 
-    if (testMatch(failuresToTriage, name, compilerUnderTest, dexVm, compilationMode)) {
-      outcome = Outcome.FAILS_WITH_ART;
+    if (testMatch(failuresToTriage, name, compilerUnderTest, runtime, compilationMode)) {
+      outcome = Outcome.FAILS_WHEN_RUN;
     }
-    if (testMatch(timeoutsWithArt, name, compilerUnderTest, dexVm, compilationMode)) {
+    if (testMatch(timeoutsWhenRun, name, compilerUnderTest, runtime, compilationMode)) {
       assert outcome == null;
-      outcome = Outcome.TIMEOUTS_WITH_ART;
+      outcome = Outcome.TIMEOUTS_WHEN_RUN;
     }
-    if (testMatch(flakyWithArt, name, compilerUnderTest, dexVm, compilationMode)) {
+    if (testMatch(flakyWhenRun, name, compilerUnderTest, runtime, compilationMode)) {
       assert outcome == null;
-      outcome = Outcome.FLAKY_WITH_ART;
+      outcome = Outcome.FLAKY_WHEN_RUN;
     }
     if (outcome == null) {
       outcome = Outcome.PASSES;
     }
-    boolean disableInlining = testMatch(requiresInliningDisabled, name, compilerUnderTest, dexVm,
-        compilationMode);
+    boolean disableInlining =
+        testMatch(requiresInliningDisabled, name, compilerUnderTest, runtime, compilationMode);
     return consumer.apply(outcome, disableInlining);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 3ef4037..0f2cf17 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -7,6 +7,7 @@
 import static org.junit.Assert.fail;
 
 import com.android.tools.r8.JctfTestSpecifications.Outcome;
+import com.android.tools.r8.TestCondition.Runtime;
 import com.android.tools.r8.TestCondition.RuntimeSet;
 import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
 import com.android.tools.r8.ToolHelper.DexVm;
@@ -81,7 +82,8 @@
     D8,
     R8,
     R8_AFTER_D8, // refers to the R8 (default: debug) step but implies a previous D8 step as well
-    D8_AFTER_R8CF
+    D8_AFTER_R8CF,
+    R8CF
   }
 
   public static final String ART_TESTS_DIR = "tests/2017-10-04/art";
@@ -1090,8 +1092,8 @@
     private final DexTool dexTool;
     // Native library to use for running this test - if any.
     private final String nativeLibrary;
-    // Skip running this test with Art - most likely due to timeout.
-    private final boolean skipArt;
+    // Skip running this test with Art or Java - most likely due to timeout.
+    private final boolean skipRun;
     // Skip running this test altogether. For example, there might be no input in this configuration
     // (e.g. no class files).
     private final boolean skipTest;
@@ -1099,9 +1101,9 @@
     private final boolean failsWithX8;
     // Expected to fail compilation with a CompilationError.
     private final boolean expectedToFailWithX8;
-    // Fails running the output in Art with an assertion error. Typically due to verification
-    // errors.
-    private final boolean failsWithArt;
+    // Fails running the output in Art or on Java with an assertion error. On Art it's typically due
+    // to verification errors.
+    private final boolean failsOnRun;
     // Runs in art but fails the run because it produces different results.
     private final boolean failsWithArtOutput;
     // Original fails in art but the R8/D8 version can run in art.
@@ -1119,10 +1121,10 @@
         String name,
         DexTool dexTool,
         File directory,
-        boolean skipArt,
+        boolean skipRun,
         boolean skipTest,
         boolean failsWithX8,
-        boolean failsWithArt,
+        boolean failsOnRun,
         boolean failsWithArtOutput,
         boolean failsWithArtOriginalOnly,
         String nativeLibrary,
@@ -1130,16 +1132,15 @@
         boolean outputMayDiffer,
         boolean disableInlining,
         boolean disableClassInlining,
-        boolean hasMissingClasses,
-        DexVm dexVm) {
+        boolean hasMissingClasses) {
       this.name = name;
       this.dexTool = dexTool;
       this.nativeLibrary = nativeLibrary;
       this.directory = directory;
-      this.skipArt = skipArt;
-      this.skipTest = skipTest || (ToolHelper.isWindows() && dexVm.getKind() == Kind.HOST);
+      this.skipRun = skipRun;
+      this.skipTest = skipTest;
       this.failsWithX8 = failsWithX8;
-      this.failsWithArt = failsWithArt;
+      this.failsOnRun = failsOnRun;
       this.failsWithArtOutput = failsWithArtOutput;
       this.failsWithArtOriginalOnly = failsWithArtOriginalOnly;
       this.expectedToFailWithX8 = expectedToFailWithX8;
@@ -1153,18 +1154,18 @@
         String name,
         DexTool dexTool,
         File directory,
-        boolean skipArt,
-        boolean failsWithArt,
+        boolean skipRun,
+        boolean failsOnRun,
         boolean disableInlining,
         DexVm dexVm) {
       this(
           name,
           dexTool,
           directory,
-          skipArt,
+          skipRun,
+          ToolHelper.isWindows() && dexVm.getKind() == Kind.HOST,
           false,
-          false,
-          failsWithArt,
+          failsOnRun,
           false,
           false,
           null,
@@ -1172,8 +1173,32 @@
           false,
           disableInlining,
           true, // Disable class inlining for JCTF tests.
+          false);
+    }
+
+    TestSpecification(
+        String name,
+        DexTool dexTool,
+        File directory,
+        boolean skipRun,
+        boolean failsOnRun,
+        boolean disableInlining) {
+      this(
+          name,
+          dexTool,
+          directory,
+          skipRun,
           false,
-          dexVm);
+          false,
+          failsOnRun,
+          false,
+          false,
+          null,
+          false,
+          false,
+          disableInlining,
+          true, // Disable class inlining for JCTF tests.
+          false);
     }
 
     public File resolveFile(String name) {
@@ -1249,7 +1274,8 @@
       skipTest.addAll(failuresToTriage);
 
       File artTestDir =
-          dexTool == DexTool.JACK || LEGACY_RUNTIME.set.contains(version) ? legacyArtTestDir
+          dexTool == DexTool.JACK || LEGACY_RUNTIME.contains(Runtime.fromDexVmVersion(version))
+              ? legacyArtTestDir
               : defaultArtTestDir;
       // Collect the tests failing code generation.
       Set<String> failsWithCompiler =
@@ -1327,7 +1353,7 @@
                 dexTool,
                 testDir,
                 skipArt.contains(name),
-                skip,
+                skip || ToolHelper.isWindows() && dexVm.getKind() == Kind.HOST,
                 failsWithCompiler.contains(name),
                 failsWithArt.contains(name),
                 failsRunWithArtOutput.contains(name),
@@ -1337,8 +1363,7 @@
                 outputMayDiffer.contains(name),
                 requireInliningToBeDisabled.contains(name),
                 requireClassInliningToBeDisabled.contains(name),
-                hasMissingClasses.contains(name),
-                dexVm));
+                hasMissingClasses.contains(name)));
       }
     }
     return data;
@@ -1348,6 +1373,7 @@
     CompilationMode compilationMode = null;
     switch (compilerUnderTest) {
       case R8:
+      case R8CF:
         compilationMode = CompilationMode.RELEASE;
         break;
       case D8:
@@ -1534,19 +1560,27 @@
         break;
       }
       case R8:
+      case R8CF:
         {
+          boolean cfBackend = compilerUnderTest == CompilerUnderTest.R8CF;
           R8Command.Builder builder =
               R8Command.builder()
                   .setMode(mode)
-                  .setOutput(Paths.get(resultPath), OutputMode.DexIndexed);
+                  .setOutput(
+                      Paths.get(resultPath),
+                      cfBackend ? OutputMode.ClassFile : OutputMode.DexIndexed);
           // Add program files directly to the underlying app to avoid errors on DEX inputs.
           ToolHelper.getAppBuilder(builder).addProgramFiles(ListUtils.map(fileNames, Paths::get));
-          AndroidApiLevel minSdkVersion = needMinSdkVersion.get(name);
-          if (minSdkVersion != null) {
-            builder.setMinApiLevel(minSdkVersion.getLevel());
-            ToolHelper.addFilteredAndroidJar(builder, minSdkVersion);
+          if (cfBackend) {
+            builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
           } else {
-            ToolHelper.addFilteredAndroidJar(builder, AndroidApiLevel.getDefault());
+            AndroidApiLevel minSdkVersion = needMinSdkVersion.get(name);
+            if (minSdkVersion != null) {
+              builder.setMinApiLevel(minSdkVersion.getLevel());
+              ToolHelper.addFilteredAndroidJar(builder, minSdkVersion);
+            } else {
+              ToolHelper.addFilteredAndroidJar(builder, AndroidApiLevel.getDefault());
+            }
           }
           if (keepRulesFile != null) {
             builder.addProguardConfigurationFiles(Paths.get(keepRulesFile));
@@ -1632,18 +1666,36 @@
             name,
             dexTool,
             resultDir,
-            outcome == JctfTestSpecifications.Outcome.TIMEOUTS_WITH_ART
-                || outcome == JctfTestSpecifications.Outcome.FLAKY_WITH_ART,
-            outcome == JctfTestSpecifications.Outcome.FAILS_WITH_ART,
+            outcome == JctfTestSpecifications.Outcome.TIMEOUTS_WHEN_RUN
+                || outcome == JctfTestSpecifications.Outcome.FLAKY_WHEN_RUN,
+            outcome == JctfTestSpecifications.Outcome.FAILS_WHEN_RUN,
             noInlining,
             dexVm);
   }
 
+  private static BiFunction<Outcome, Boolean, TestSpecification> jctfOutcomeToSpecificationJava(
+      String name, File resultDir) {
+    return (outcome, noInlining) ->
+        new TestSpecification(
+            name,
+            DexTool.NONE,
+            resultDir,
+            outcome == JctfTestSpecifications.Outcome.TIMEOUTS_WHEN_RUN
+                || outcome == JctfTestSpecifications.Outcome.FLAKY_WHEN_RUN,
+            outcome == JctfTestSpecifications.Outcome.FAILS_WHEN_RUN,
+            noInlining);
+  }
+
   protected void runJctfTest(CompilerUnderTest compilerUnderTest, String classFilePath,
       String fullClassName)
       throws IOException, ProguardRuleParserException, ExecutionException,
       CompilationFailedException {
-    DexVm dexVm = ToolHelper.getDexVm();
+    Runtime runtime;
+    if (compilerUnderTest == CompilerUnderTest.R8CF) {
+      runtime = Runtime.JAVA;
+    } else {
+      runtime = Runtime.fromDexVmVersion(ToolHelper.getDexVm().getVersion());
+    }
 
     CompilerUnderTest firstCompilerUnderTest =
         compilerUnderTest == CompilerUnderTest.R8_AFTER_D8
@@ -1657,9 +1709,11 @@
         JctfTestSpecifications.getExpectedOutcome(
             name,
             firstCompilerUnderTest,
-            dexVm,
+            runtime,
             compilationMode,
-            jctfOutcomeToSpecification(name, DexTool.NONE, resultDir, dexVm));
+            compilerUnderTest == CompilerUnderTest.R8CF
+                ? jctfOutcomeToSpecificationJava(name, resultDir)
+                : jctfOutcomeToSpecification(name, DexTool.NONE, resultDir, ToolHelper.getDexVm()));
 
     if (specification.skipTest) {
       return;
@@ -1724,14 +1778,19 @@
       fileNames.add(f.getCanonicalPath());
     }
 
-    runJctfTestDoRunOnArt(
-        fileNames,
-        specification,
-        firstCompilerUnderTest,
-        fullClassName,
-        compilationMode,
-        dexVm,
-        resultDir);
+    if (compilerUnderTest == CompilerUnderTest.R8CF) {
+      runJctfTestDoRunOnJava(fileNames, specification, fullClassName, compilationMode, resultDir);
+    } else {
+
+      runJctfTestDoRunOnArt(
+          fileNames,
+          specification,
+          firstCompilerUnderTest,
+          fullClassName,
+          compilationMode,
+          ToolHelper.getDexVm(),
+          resultDir);
+    }
 
     // second pass if D8_R8Debug
     if (compilerUnderTest == CompilerUnderTest.R8_AFTER_D8) {
@@ -1746,9 +1805,9 @@
           JctfTestSpecifications.getExpectedOutcome(
               name,
               CompilerUnderTest.R8_AFTER_D8,
-              dexVm,
+              runtime,
               compilationMode,
-              jctfOutcomeToSpecification(name, DexTool.DX, r8ResultDir, dexVm));
+              jctfOutcomeToSpecification(name, DexTool.DX, r8ResultDir, ToolHelper.getDexVm()));
       if (specification.skipTest) {
         return;
       }
@@ -1758,7 +1817,7 @@
           CompilerUnderTest.R8,
           fullClassName,
           compilationMode,
-          dexVm,
+          ToolHelper.getDexVm(),
           r8ResultDir);
     }
   }
@@ -1771,8 +1830,7 @@
       CompilationMode mode,
       DexVm dexVm,
       File resultDir)
-      throws IOException, ProguardRuleParserException, ExecutionException,
-      CompilationFailedException {
+      throws IOException, CompilationFailedException {
     executeCompilerUnderTest(compilerUnderTest, fileNames, resultDir.getAbsolutePath(), mode,
         specification.disableInlining, specification.disableClassInlining,
         specification.hasMissingClasses);
@@ -1797,7 +1855,7 @@
     }
 
     boolean compileOnly = System.getProperty("jctf_compile_only", "0").equals("1");
-    if (compileOnly || specification.skipArt) {
+    if (compileOnly || specification.skipRun) {
       if (ToolHelper.isDex2OatSupported()) {
         // verify dex code instead of running it
         Path oatFile = temp.getRoot().toPath().resolve("all.oat");
@@ -1816,7 +1874,7 @@
     builder.setMainClass(JUNIT_TEST_RUNNER);
     builder.appendProgramArgument(fullClassName);
 
-    if (specification.failsWithArt) {
+    if (specification.failsOnRun) {
       expectException(AssertionError.class);
     }
 
@@ -1827,10 +1885,54 @@
           specification.resolveFile("classes.dex"), e);
       throw e;
     }
-    if (specification.failsWithArt) {
-      System.err.println("Should have failed run with art");
+    if (specification.failsOnRun) {
+      System.err.println("Should have failed run with art.");
+    }
+  }
+
+  private void runJctfTestDoRunOnJava(
+      Collection<String> fileNames,
+      TestSpecification specification,
+      String fullClassName,
+      CompilationMode mode,
+      File resultDir)
+      throws IOException, CompilationFailedException {
+    if (JctfTestSpecifications.compilationFailsWithAsmMethodTooLarge.contains(specification.name)) {
+      expectException(org.objectweb.asm.MethodTooLargeException.class);
+    }
+    executeCompilerUnderTest(
+        CompilerUnderTest.R8CF,
+        fileNames,
+        resultDir.getAbsolutePath(),
+        mode,
+        specification.disableInlining,
+        specification.disableClassInlining,
+        specification.hasMissingClasses);
+
+    boolean compileOnly = System.getProperty("jctf_compile_only", "0").equals("1");
+
+    if (compileOnly || specification.skipRun) {
       return;
     }
+
+    if (specification.failsOnRun) {
+      expectException(AssertionError.class);
+    }
+
+    ProcessResult result = ToolHelper.runJava(resultDir.toPath(), JUNIT_TEST_RUNNER, fullClassName);
+
+    if (result.exitCode != 0) {
+      throw new AssertionError(
+          "Test failed on java.\nSTDOUT >>>\n"
+              + result.stdout
+              + "\n<<< STDOUT\nSTDERR >>>\n"
+              + result.stderr
+              + "\n<<< STDERR\n");
+    }
+
+    if (specification.failsOnRun) {
+      System.err.println("Should have failed run with java.");
+    }
   }
 
   protected void runArtTest(DexVm dexVm, CompilerUnderTest compilerUnderTest) throws Throwable {
@@ -1972,7 +2074,8 @@
           specification.hasMissingClasses);
     }
 
-    if (!specification.skipArt && (ToolHelper.artSupported() || ToolHelper.dealsWithGoldenFiles())) {
+    if (!specification.skipRun
+        && (ToolHelper.artSupported() || ToolHelper.dealsWithGoldenFiles())) {
       File originalFile;
       File processedFile;
 
@@ -1992,7 +2095,7 @@
       File expectedFile = specification.resolveFile("expected.txt");
       String expected =
           com.google.common.io.Files.asCharSource(expectedFile, Charsets.UTF_8).read();
-      if (specification.failsWithArt) {
+      if (specification.failsOnRun) {
         expectException(AssertionError.class);
       }
 
@@ -2005,7 +2108,7 @@
             specification.resolveFile("classes.dex"), e);
         throw e;
       }
-      if (specification.failsWithArt) {
+      if (specification.failsOnRun) {
         System.err.println("Should have failed run with art");
         return;
       }
diff --git a/src/test/java/com/android/tools/r8/TestCondition.java b/src/test/java/com/android/tools/r8/TestCondition.java
index b85e2f2..865ca12 100644
--- a/src/test/java/com/android/tools/r8/TestCondition.java
+++ b/src/test/java/com/android/tools/r8/TestCondition.java
@@ -6,13 +6,52 @@
 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
 import com.android.tools.r8.R8RunArtTestsTest.DexTool;
 import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.errors.Unreachable;
+import com.google.common.collect.Sets;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.EnumSet;
-import java.util.Set;
+import java.util.List;
 import java.util.stream.Collectors;
 
 public class TestCondition {
 
+  enum Runtime {
+    ART_V4_0_4,
+    ART_V4_4_4,
+    ART_V5_1_1,
+    ART_V6_0_1,
+    ART_V7_0_0,
+    ART_DEFAULT,
+    JAVA;
+
+    static final Runtime LOWEST_ART_VERSION = ART_V4_0_4;
+    static final Runtime HIGHEST_ART_VERSION = ART_DEFAULT;
+
+    static Runtime fromDexVmVersion(DexVm.Version version) {
+      switch (version) {
+        case V4_0_4:
+          return ART_V4_0_4;
+        case V4_4_4:
+          return ART_V4_4_4;
+        case V5_1_1:
+          return ART_V5_1_1;
+        case V6_0_1:
+          return ART_V6_0_1;
+        case V7_0_0:
+          return ART_V7_0_0;
+        case DEFAULT:
+          return ART_DEFAULT;
+        default:
+          throw new Unreachable();
+      }
+    }
+
+    static boolean isArt(Runtime runtime) {
+      return EnumSet.range(LOWEST_ART_VERSION, HIGHEST_ART_VERSION).contains(runtime);
+    }
+  }
+
   static class ToolSet {
 
     final EnumSet<DexTool> set;
@@ -33,14 +72,22 @@
 
   static class RuntimeSet {
 
-    final EnumSet<DexVm.Version> set;
+    private EnumSet<Runtime> set;
 
-    public RuntimeSet(EnumSet<DexVm.Version> set) {
+    public RuntimeSet(EnumSet<Runtime> set) {
       this.set = set;
     }
 
-    public RuntimeSet(Set<DexVm.Version> set) {
-      this.set = EnumSet.copyOf(set);
+    public static RuntimeSet fromDexVmVersionSet(EnumSet<DexVm.Version> dexVmSet) {
+      List<Runtime> list = new ArrayList<>(dexVmSet.size());
+      for (DexVm.Version version : dexVmSet) {
+        list.add(Runtime.fromDexVmVersion(version));
+      }
+      return new RuntimeSet(EnumSet.copyOf(list));
+    }
+
+    boolean contains(Runtime runtime) {
+      return set.contains(runtime);
     }
   }
 
@@ -63,12 +110,15 @@
   // settings, respectively
   public static final CompilerSet R8_COMPILER =
       compilers(
-          CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8, CompilerUnderTest.D8_AFTER_R8CF);
+          CompilerUnderTest.R8,
+          CompilerUnderTest.R8_AFTER_D8,
+          CompilerUnderTest.D8_AFTER_R8CF,
+          CompilerUnderTest.R8CF);
   public static final CompilerSet R8DEX_COMPILER =
       compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8);
   public static final CompilerSet R8_AFTER_D8_COMPILER = compilers(CompilerUnderTest.R8_AFTER_D8);
   public static final CompilerSet R8_NOT_AFTER_D8_COMPILER =
-      compilers(CompilerUnderTest.R8, CompilerUnderTest.D8_AFTER_R8CF);
+      compilers(CompilerUnderTest.R8, CompilerUnderTest.D8_AFTER_R8CF, CompilerUnderTest.R8CF);
   public static final CompilerSet R8DEX_NOT_AFTER_D8_COMPILER = compilers(CompilerUnderTest.R8);
 
   public static final CompilationModeSet DEBUG_MODE =
@@ -79,23 +129,25 @@
   private static final ToolSet ANY_TOOL = new ToolSet(EnumSet.allOf(DexTool.class));
   private static final CompilerSet ANY_COMPILER =
       new CompilerSet(EnumSet.allOf(CompilerUnderTest.class));
-  private static final RuntimeSet ANY_RUNTIME = new RuntimeSet(EnumSet.allOf(DexVm.Version.class));
+  private static final RuntimeSet ANY_RUNTIME = new RuntimeSet(EnumSet.allOf(Runtime.class));
+  private static final RuntimeSet ANY_DEX_VM_RUNTIME =
+      RuntimeSet.fromDexVmVersionSet(EnumSet.allOf(ToolHelper.DexVm.Version.class));
   private static final CompilationModeSet ANY_MODE =
       new CompilationModeSet(EnumSet.allOf(CompilationMode.class));
 
   private final EnumSet<DexTool> dexTools;
   private final EnumSet<CompilerUnderTest> compilers;
-  private final EnumSet<DexVm.Version> dexVms;
+  private final EnumSet<Runtime> runtimes;
   private final EnumSet<CompilationMode> compilationModes;
 
   public TestCondition(
       EnumSet<DexTool> dexTools,
       EnumSet<CompilerUnderTest> compilers,
-      EnumSet<DexVm.Version> dexVms,
+      EnumSet<Runtime> runtimes,
       EnumSet<CompilationMode> compilationModes) {
     this.dexTools = dexTools;
     this.compilers = compilers;
-    this.dexVms = dexVms;
+    this.runtimes = runtimes;
     this.compilationModes = compilationModes;
   }
 
@@ -111,20 +163,48 @@
 
   public static RuntimeSet runtimes(DexVm.Version... runtimes) {
     assert runtimes.length > 0;
+    return RuntimeSet.fromDexVmVersionSet(EnumSet.copyOf(Arrays.asList(runtimes)));
+  }
+
+  public static RuntimeSet runtimes(Runtime... runtimes) {
+    assert runtimes.length > 0;
     return new RuntimeSet(EnumSet.copyOf(Arrays.asList(runtimes)));
   }
 
   public static RuntimeSet runtimesUpTo(DexVm.Version upto) {
-    return new RuntimeSet(EnumSet.range(DexVm.Version.first(), upto));
+    return RuntimeSet.fromDexVmVersionSet(EnumSet.range(DexVm.Version.first(), upto));
+  }
+
+  public static RuntimeSet artRuntimesUpTo(Runtime upto) {
+    assert Runtime.isArt(upto);
+    return new RuntimeSet(EnumSet.range(Runtime.LOWEST_ART_VERSION, upto));
+  }
+
+  public static RuntimeSet artRuntimesUpToAndJava(Runtime upto) {
+    return runtimes(
+        Sets.union(artRuntimesUpTo(upto).set, runtimes(Runtime.JAVA).set).toArray(new Runtime[0]));
   }
 
   public static RuntimeSet runtimesFrom(DexVm.Version start) {
-    return new RuntimeSet(EnumSet.range(start, DexVm.Version.last()));
+    return RuntimeSet.fromDexVmVersionSet(EnumSet.range(start, DexVm.Version.last()));
+  }
+
+  public static RuntimeSet artRuntimesFrom(Runtime start) {
+    assert Runtime.isArt(start);
+    return new RuntimeSet(EnumSet.range(start, Runtime.HIGHEST_ART_VERSION));
+  }
+
+  public static RuntimeSet artRuntimesFromAndJava(Runtime start) {
+    return runtimes(
+        Sets.union(artRuntimesFrom(start).set, runtimes(Runtime.JAVA).set).toArray(new Runtime[0]));
   }
 
   public static RuntimeSet and(RuntimeSet... sets) {
-    return new RuntimeSet(Arrays.stream(sets).flatMap(runtimeSet -> runtimeSet.set.stream())
-        .collect(Collectors.toSet()));
+    return new RuntimeSet(
+        EnumSet.copyOf(
+            Arrays.stream(sets)
+                .flatMap(runtimeSet -> runtimeSet.set.stream())
+                .collect(Collectors.toSet())));
   }
 
   public static TestCondition match(
@@ -143,6 +223,11 @@
     return match(TestCondition.ANY_TOOL, TestCondition.ANY_COMPILER, TestCondition.ANY_RUNTIME);
   }
 
+  public static TestCondition anyDexVm() {
+    return match(
+        TestCondition.ANY_TOOL, TestCondition.ANY_COMPILER, TestCondition.ANY_DEX_VM_RUNTIME);
+  }
+
   public static TestCondition match(ToolSet tools) {
     return match(tools, TestCondition.ANY_COMPILER, TestCondition.ANY_RUNTIME);
   }
@@ -174,11 +259,19 @@
   public boolean test(
       DexTool dexTool,
       CompilerUnderTest compilerUnderTest,
-      DexVm.Version dexVmVersion,
+      Runtime runtime,
       CompilationMode compilationMode) {
     return dexTools.contains(dexTool)
         && compilers.contains(compilerUnderTest)
-        && dexVms.contains(dexVmVersion)
+        && runtimes.contains(runtime)
         && compilationModes.contains(compilationMode);
   }
+
+  public boolean test(
+      DexTool dexTool,
+      CompilerUnderTest compilerUnderTest,
+      DexVm.Version version,
+      CompilationMode compilationMode) {
+    return test(dexTool, compilerUnderTest, Runtime.fromDexVmVersion(version), compilationMode);
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingTest.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
rename to src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingTest.java
index 7ce8a05..3b552c8 100644
--- a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingTest.java
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package com.android.tools.r8.naming;
+package com.android.tools.r8.naming.applymapping;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
@@ -18,6 +18,7 @@
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.naming.ClassNameMapper;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/CompositionalLenseTest.java
similarity index 89%
rename from src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java
rename to src/test/java/com/android/tools/r8/naming/applymapping/CompositionalLenseTest.java
index 711ae60..446a481 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/CompositionalLenseTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.memberrebinding;
+package com.android.tools.r8.naming.applymapping;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.junit.Assert.assertEquals;
@@ -44,7 +44,7 @@
   // Sub#foo ~> Base#foo by member rebinding analysis
 }
 
-class TestMain {
+class CompositionalLenseTestMain {
   public static void main(String[] args) {
     // Without regard to the order of member rebinding and apply mapping,
     // this call should be mapped to X.bar(), not Y.bar() nor Base.foo().
@@ -55,7 +55,7 @@
 @RunWith(Parameterized.class)
 public class CompositionalLenseTest extends TestBase {
   private final static List<Class> CLASSES =
-      ImmutableList.of(Base.class, Sub.class, TestMain.class);
+      ImmutableList.of(Base.class, Sub.class, CompositionalLenseTestMain.class);
 
   private Backend backend;
 
@@ -72,9 +72,9 @@
   public void test() throws Exception {
     Path mapPath = temp.newFile("test-mapping.txt").toPath();
     List<String> pgMap = ImmutableList.of(
-        "com.android.tools.r8.memberrebinding.Base -> X:",
+        "com.android.tools.r8.naming.applymapping.Base -> X:",
         "  void foo() -> bar",
-        "com.android.tools.r8.memberrebinding.Sub -> Y:",
+        "com.android.tools.r8.naming.applymapping.Sub -> Y:",
         "  void foo() -> bar"
     );
     FileUtils.writeTextFile(mapPath, pgMap);
@@ -84,7 +84,7 @@
     builder
         .addProguardConfiguration(
             ImmutableList.of(
-                keepMainProguardConfiguration(TestMain.class),
+                keepMainProguardConfiguration(CompositionalLenseTestMain.class),
                 "-applymapping " + mapPath,
                 "-dontobfuscate"), // to use the renamed names in test-mapping.txt
             Origin.unknown())
@@ -97,7 +97,7 @@
               options.enableVerticalClassMerging = false;
             });
     CodeInspector codeInspector = new CodeInspector(processedApp);
-    ClassSubject classSubject = codeInspector.clazz(TestMain.class);
+    ClassSubject classSubject = codeInspector.clazz(CompositionalLenseTestMain.class);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(CodeInspector.MAIN);
     assertThat(methodSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/MemberResolutionAsmTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/MemberResolutionAsmTest.java
new file mode 100644
index 0000000..102a6a3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/MemberResolutionAsmTest.java
@@ -0,0 +1,230 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.naming.applymapping;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThat;
+
+import com.android.tools.r8.AsmTestBase;
+import com.android.tools.r8.R8Command;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.ToolHelper.ProcessResult;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import com.google.common.collect.ImmutableList;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class MemberResolutionAsmTest extends AsmTestBase {
+  private final Backend backend;
+
+  @Parameterized.Parameters(name = "backend: {0}")
+  public static Collection<Backend> data() {
+    return Arrays.asList(Backend.values());
+  }
+
+  public MemberResolutionAsmTest(Backend backend) {
+    this.backend = backend;
+  }
+
+  //  class HasMapping { // : X
+  //    HasMapping() {
+  //      foo();
+  //    }
+  //
+  //    void foo() { // : a
+  //      System.out.println("HasMapping#foo");
+  //    }
+  //  }
+  //
+  //  class NoMapping extends HasMapping { // : Y
+  //    NoMapping() {
+  //      super();
+  //      foo();
+  //    }
+  //
+  //    private void foo() { // no mapping
+  //      System.out.println("NoMapping#foo");
+  //    }
+  //  }
+  //
+  //  class NoMappingMain {
+  //    public static void main(String[] args) {
+  //      new NoMapping();
+  //    }
+  //  }
+  @Test
+  public void test_noMapping() throws Exception {
+    String main = "NoMappingMain";
+    AndroidApp input = buildAndroidApp(
+        HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
+
+    Path mapPath = temp.newFile("test-mapping.txt").toPath();
+    List<String> pgMap = ImmutableList.of(
+        "HasMapping -> X:",
+        "  void foo() -> a",
+        "NoMapping -> Y:"
+        // Intentionally missing a mapping for `private` foo().
+    );
+    FileUtils.writeTextFile(mapPath, pgMap);
+
+    R8Command.Builder builder = ToolHelper.prepareR8CommandBuilder(input, emptyConsumer(backend));
+    builder
+        .addProguardConfiguration(
+            ImmutableList.of(
+                keepMainProguardConfiguration(main),
+                // Do not turn on -allowaccessmodification
+                "-applymapping " + mapPath,
+                "-dontobfuscate"), // to use the renamed names in test-mapping.txt
+            Origin.unknown())
+        .addLibraryFiles(runtimeJar(backend));
+    AndroidApp processedApp =
+        ToolHelper.runR8(
+            builder.build(),
+            options -> {
+              options.enableInlining = false;
+              options.enableVerticalClassMerging = false;
+            });
+
+    List<byte[]> classBytes = ImmutableList.of(
+        HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
+    ProcessResult outputBefore = runOnJavaRaw(main, classBytes, ImmutableList.of());
+    assertEquals(0, outputBefore.exitCode);
+    String outputAfter = runOnVM(processedApp, main, backend);
+    assertEquals(outputBefore.stdout.trim(), outputAfter.trim());
+
+    CodeInspector codeInspector = new CodeInspector(processedApp, mapPath);
+    ClassSubject base = codeInspector.clazz("HasMapping");
+    assertThat(base, isPresent());
+    assertThat(base, isRenamed());
+    assertEquals("X", base.getFinalName());
+    MethodSubject x = base.method("void", "foo", ImmutableList.of());
+    assertThat(x, isPresent());
+    assertThat(x, isRenamed());
+    assertEquals("a", x.getFinalName());
+
+    ClassSubject sub = codeInspector.clazz("NoMapping");
+    assertThat(sub, isPresent());
+    assertThat(sub, isRenamed());
+    assertEquals("Y", sub.getFinalName());
+    MethodSubject y = sub.method("void", "foo", ImmutableList.of());
+    assertThat(y, isPresent());
+    assertThat(y, not(isRenamed()));
+    assertEquals("foo", y.getFinalName());
+  }
+
+  //  class A { // : X
+  //    A() {
+  //      x();
+  //      y();
+  //    }
+  //
+  //    private void x() { // : y
+  //      System.out.println("A#x");
+  //    }
+  //
+  //    public void y() { // : x
+  //      System.out.println("A#y");
+  //    }
+  //  }
+  //
+  //  class B extends A { // : Y
+  //  }
+  //
+  //  class Main {
+  //    public static void main(String[] args) {
+  //      new B().x(); // IllegalAccessError
+  //    }
+  //  }
+  @Test
+  public void test_swapping() throws Exception {
+    String main = "Main";
+    AndroidApp input = buildAndroidApp(
+        ADump.dump(), BDump.dump(), MainDump.dump());
+
+    Path mapPath = temp.newFile("test-mapping.txt").toPath();
+    List<String> pgMap = ImmutableList.of(
+        "A -> X:",
+        "  void x() -> y",
+        "  void y() -> x",
+        "B -> Y:"
+        // Intentionally missing mappings for non-overridden members
+    );
+    FileUtils.writeTextFile(mapPath, pgMap);
+
+    R8Command.Builder builder = ToolHelper.prepareR8CommandBuilder(input, emptyConsumer(backend));
+    builder
+        .addProguardConfiguration(
+            ImmutableList.of(
+                keepMainProguardConfiguration(main),
+                // Do not turn on -allowaccessmodification
+                "-applymapping " + mapPath,
+                "-dontobfuscate"), // to use the renamed names in test-mapping.txt
+            Origin.unknown())
+        .addLibraryFiles(runtimeJar(backend));
+    AndroidApp processedApp =
+        ToolHelper.runR8(
+            builder.build(),
+            options -> {
+              options.enableInlining = false;
+              options.enableVerticalClassMerging = false;
+            });
+
+    List<byte[]> classBytes = ImmutableList.of(ADump.dump(), BDump.dump(), MainDump.dump());
+    ProcessResult outputBefore = runOnJavaRaw(main, classBytes, ImmutableList.of());
+    assertNotEquals(0, outputBefore.exitCode);
+    String expectedErrorMessage = "IllegalAccessError";
+    String expectedErrorSignature = "A.x()V";
+    assertThat(outputBefore.stderr, containsString(expectedErrorMessage));
+    assertThat(outputBefore.stderr, containsString(expectedErrorSignature));
+    ProcessResult outputAfter = runOnVMRaw(processedApp, main, backend);
+    assertNotEquals(0, outputAfter.exitCode);
+    expectedErrorSignature = "X.y()V";
+    if (backend == Backend.DEX) {
+      expectedErrorSignature = "void X.y()";
+      if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(Version.V6_0_1)) {
+        expectedErrorMessage ="IncompatibleClassChangeError";
+      }
+      if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(Version.V4_4_4)) {
+        expectedErrorMessage ="illegal method access";
+        expectedErrorSignature = "LX;.y ()V";
+      }
+    }
+    assertThat(outputAfter.stderr, containsString(expectedErrorMessage));
+    assertThat(outputAfter.stderr, containsString(expectedErrorSignature));
+
+    CodeInspector codeInspector = new CodeInspector(processedApp, mapPath);
+    ClassSubject base = codeInspector.clazz("A");
+    assertThat(base, isPresent());
+    assertThat(base, isRenamed());
+    assertEquals("X", base.getFinalName());
+    MethodSubject x = base.method("void", "x", ImmutableList.of());
+    assertThat(x, isPresent());
+    assertThat(x, isRenamed());
+    assertEquals("y", x.getFinalName());
+
+    ClassSubject sub = codeInspector.clazz("B");
+    assertThat(sub, isPresent());
+    assertThat(sub, isRenamed());
+    assertEquals("Y", sub.getFinalName());
+    MethodSubject subX = sub.method("void", "x", ImmutableList.of());
+    assertThat(subX, not(isPresent()));
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/MemberResolutionTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/MemberResolutionTest.java
new file mode 100644
index 0000000..61e51be
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/MemberResolutionTest.java
@@ -0,0 +1,155 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.naming.applymapping;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import com.android.tools.r8.R8Command;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import com.google.common.collect.ImmutableList;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+// AbstractChecker -> X:
+abstract class AbstractChecker {
+  // String tag -> p
+  private String tag = "PrivateInitialTag_AbstractChecker";
+
+  // check() -> x
+  private void check() {
+    System.out.println("AbstractChecker#check:" + tag);
+  }
+
+  // foo() -> a
+  protected void foo() {
+    check();
+  }
+}
+
+// ConcreteChecker -> Y:
+class ConcreteChecker extends AbstractChecker {
+  // This should not be conflict with AbstractChecker#tag due to the access control.
+  // String tag -> q
+  private String tag = "PrivateInitialTag_ConcreteChecker";
+
+  ConcreteChecker(String tag){
+    this.tag = tag;
+  }
+
+  // This should not be conflict with AbstractChecker#check due to the access control.
+  // check() -> y
+  private void check() {
+    System.out.println("ConcreteChecker#check:" + tag);
+  }
+
+  // foo() -> a
+  @Override
+  protected void foo() {
+    super.foo();
+    check();
+  }
+}
+
+class MemberResolutionTestMain {
+  public static void main(String[] args) {
+    ConcreteChecker c = new ConcreteChecker("NewTag");
+    c.foo();
+  }
+}
+
+@RunWith(Parameterized.class)
+public class MemberResolutionTest extends TestBase {
+  private final static List<Class> CLASSES = ImmutableList.of(
+      AbstractChecker.class, ConcreteChecker.class, MemberResolutionTestMain.class);
+
+  private Backend backend;
+
+  @Parameterized.Parameters(name = "Backend: {0}")
+  public static Collection<Backend> data() {
+    return Arrays.asList(Backend.values());
+  }
+
+  public MemberResolutionTest(Backend backend) {
+    this.backend = backend;
+  }
+
+  @Test
+  public void testPrivateMethodsWithSameName() throws Exception {
+    String pkg = this.getClass().getPackage().getName();
+    Path mapPath = temp.newFile("test-mapping.txt").toPath();
+    List<String> pgMap = ImmutableList.of(
+        pkg + ".AbstractChecker -> " + pkg + ".X:",
+        "  java.lang.String tag -> p",
+        "  void check() -> x",
+        "  void foo() -> a",
+        pkg + ".ConcreteChecker -> " + pkg + ".Y:",
+        "  java.lang.String tag -> q",
+        "  void check() -> y",
+        "  void foo() -> a"
+    );
+    FileUtils.writeTextFile(mapPath, pgMap);
+
+    AndroidApp app = readClasses(CLASSES);
+    R8Command.Builder builder = ToolHelper.prepareR8CommandBuilder(app, emptyConsumer(backend));
+    builder
+        .addProguardConfiguration(
+            ImmutableList.of(
+                keepMainProguardConfiguration(MemberResolutionTestMain.class),
+                // Do not turn on -allowaccessmodification
+                "-applymapping " + mapPath,
+                "-dontobfuscate"), // to use the renamed names in test-mapping.txt
+            Origin.unknown())
+        .addLibraryFiles(runtimeJar(backend));
+    AndroidApp processedApp =
+        ToolHelper.runR8(
+            builder.build(),
+            options -> {
+              options.enableInlining = false;
+              options.enableVerticalClassMerging = false;
+            });
+
+    String outputBefore = runOnJava(MemberResolutionTestMain.class);
+    String outputAfter = runOnVM(processedApp, MemberResolutionTestMain.class, backend);
+    assertEquals(outputBefore, outputAfter);
+
+    CodeInspector codeInspector = new CodeInspector(processedApp, mapPath);
+    ClassSubject base = codeInspector.clazz(AbstractChecker.class);
+    assertThat(base, isPresent());
+    FieldSubject p = base.field("java.lang.String", "tag");
+    assertThat(p, isPresent());
+    assertThat(p, isRenamed());
+    assertEquals("p", p.getFinalName());
+    MethodSubject x = base.method("void", "check", ImmutableList.of());
+    assertThat(x, isPresent());
+    assertThat(x, isRenamed());
+    assertEquals("x", x.getFinalName());
+
+    ClassSubject sub = codeInspector.clazz(ConcreteChecker.class);
+    assertThat(sub, isPresent());
+    FieldSubject q = sub.field("java.lang.String", "tag");
+    assertThat(q, isPresent());
+    assertThat(q, isRenamed());
+    assertEquals("q", q.getFinalName());
+    MethodSubject y = sub.method("void", "check", ImmutableList.of());
+    assertThat(y, isPresent());
+    assertThat(y, isRenamed());
+    assertEquals("y", y.getFinalName());
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/NoMappingDump.java b/src/test/java/com/android/tools/r8/naming/applymapping/NoMappingDump.java
new file mode 100644
index 0000000..ae46c2a
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/NoMappingDump.java
@@ -0,0 +1,197 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.naming.applymapping;
+
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+// Generated by running tools/asmifier.py on the following code snippet:
+//
+//  class HasMapping {
+//    HasMapping() {
+//      foo();
+//    }
+//
+//    void foo() {
+//      System.out.println("HasMapping#foo");
+//    }
+//  }
+class HasMappingDump implements Opcodes {
+
+  public static byte[] dump () throws Exception {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(V1_8, ACC_SUPER, "HasMapping", null, "java/lang/Object", null);
+
+    classWriter.visitSource("HasMapping.java", null);
+
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(2, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(3, label1);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "HasMapping", "foo", "()V", false);
+      Label label2 = new Label();
+      methodVisitor.visitLabel(label2);
+      methodVisitor.visitLineNumber(4, label2);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(1, 1);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(0, "foo", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(3, label0);
+      methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+      methodVisitor.visitLdcInsn("HasMapping#foo");
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(4, label1);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 1);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
+
+// Generated by running tools/asmifier.py on the following code snippet:
+//
+//  class NoMapping extends HasMapping {
+//    NoMapping() {
+//      super();
+//      bar();
+//    }
+//
+//    private void bar() {
+//      System.out.println("NoMapping#foo");
+//    }
+//  }
+//
+// then renamed bar() to foo() to introduce name clash.
+class NoMappingDump implements Opcodes {
+
+  public static byte[] dump () throws Exception {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(V1_8, ACC_SUPER, "NoMapping", null, "HasMapping", null);
+
+    classWriter.visitSource("NoMapping.java", null);
+
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(12, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "HasMapping", "<init>", "()V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(13, label1);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "NoMapping", "foo", "()V", false);
+      Label label2 = new Label();
+      methodVisitor.visitLabel(label2);
+      methodVisitor.visitLineNumber(14, label2);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(1, 1);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(ACC_PRIVATE, "foo", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(9, label0);
+      methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+      methodVisitor.visitLdcInsn("NoMapping#foo");
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(10, label1);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 1);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
+
+// Generated by running tools/asmifier.py on the following code snippet:
+//
+//  public class NoMappingMain {
+//    public static void main(String[] args) {
+//      new NoMapping();
+//    }
+//  }
+class NoMappingMainDump implements Opcodes {
+
+  public static byte[] dump () throws Exception {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(
+        V1_8, ACC_PUBLIC | ACC_SUPER, "NoMappingMain", null, "java/lang/Object", null);
+
+    classWriter.visitSource("NoMappingMain.java", null);
+
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(19, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(1, 1);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(
+          ACC_PUBLIC | ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(22, label0);
+      methodVisitor.visitTypeInsn(NEW, "NoMapping");
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "NoMapping", "<init>", "()V", false);
+      methodVisitor.visitInsn(POP);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(23, label1);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 1);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/SwappingDump.java b/src/test/java/com/android/tools/r8/naming/applymapping/SwappingDump.java
new file mode 100644
index 0000000..0dea699
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/SwappingDump.java
@@ -0,0 +1,191 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.naming.applymapping;
+
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+// Generated by running tools/asmifier.py on the following code snippet:
+//
+//  class A {
+//    A() {
+//      x();
+//      y();
+//    }
+//
+//    private void x() {
+//      System.out.println("A#x");
+//    }
+//
+//    public void y() {
+//      System.out.println("A#y");
+//    }
+//  }
+class ADump implements Opcodes {
+
+  public static byte[] dump () throws Exception {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(V1_8, ACC_SUPER, "A", null, "java/lang/Object", null);
+
+    classWriter.visitSource("Test.java", null);
+
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(2, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(3, label1);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "A", "x", "()V", false);
+      Label label2 = new Label();
+      methodVisitor.visitLabel(label2);
+      methodVisitor.visitLineNumber(4, label2);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "A", "y", "()V", false);
+      Label label3 = new Label();
+      methodVisitor.visitLabel(label3);
+      methodVisitor.visitLineNumber(5, label3);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(1, 1);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(ACC_PRIVATE, "x", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(7, label0);
+      methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+      methodVisitor.visitLdcInsn("A#x");
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(8, label1);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 1);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "y", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(11, label0);
+      methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+      methodVisitor.visitLdcInsn("A#y");
+      methodVisitor.visitMethodInsn(
+          INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(12, label1);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 1);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
+
+// Generated by running tools/asmifier.py on the following code snippet:
+//
+//  class B extends A {
+//  }
+class BDump implements Opcodes {
+
+  public static byte[] dump () throws Exception {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(V1_8, ACC_SUPER, "B", null, "A", null);
+
+    classWriter.visitSource("Test.java", null);
+
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(15, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "A", "<init>", "()V", false);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(1, 1);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
+
+// Generated by running tools/asmifier.py on the following code snippet:
+//
+//  public class Main {
+//    public static void main(String[] args) {
+//      new B().y();
+//    }
+//  }
+//
+// then replaced use of y() with x() to introduce IllegalAccessError.
+class MainDump implements Opcodes {
+
+  public static byte[] dump () throws Exception {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    MethodVisitor methodVisitor;
+
+    classWriter.visit(V1_8, ACC_PUBLIC | ACC_SUPER, "Main", null, "java/lang/Object", null);
+
+    classWriter.visitSource("Test.java", null);
+
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(18, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(1, 1);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(
+          ACC_PUBLIC | ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(20, label0);
+      methodVisitor.visitTypeInsn(NEW, "B");
+      methodVisitor.visitInsn(DUP);
+      methodVisitor.visitMethodInsn(INVOKESPECIAL, "B", "<init>", "()V", false);
+      methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "B", "x", "()V", false);
+      Label label1 = new Label();
+      methodVisitor.visitLabel(label1);
+      methodVisitor.visitLineNumber(21, label1);
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 1);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
+
diff --git a/tools/create_jctf_tests.py b/tools/create_jctf_tests.py
index b7b449d..28dde99 100755
--- a/tools/create_jctf_tests.py
+++ b/tools/create_jctf_tests.py
@@ -130,6 +130,7 @@
 
     generate_test(class_name, 'd8', 'R8_AFTER_D8', relative_package)
     generate_test(class_name, 'r8', 'R8', relative_package)
+    generate_test(class_name, 'r8cf', 'R8CF', relative_package)
 
 
 if __name__ == '__main__':
