Version 1.3.24
Merge: Ensure pretended members indeed do not exist while applying mappings.
CL: https://r8-review.googlesource.com/c/r8/+/28260
Merge: Fix expected error message and signature for older VMs.
CL: https://r8-review.googlesource.com/c/r8/+/28520
Merge: Repackage -applymapping tests.
CL: https://r8-review.googlesource.com/c/r8/+/28242
Merge: Reland "Enable CF backend for JCTF tests."
CL: https://r8-review.googlesource.com/c/r8/+/27562
branch d8-1.3 has been broken (in terms of JCTF tests)
Bug: 117237053
Change-Id: I1254ac3250e69befbdeffa36c0fb83a59a656b2e
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__':