[ApiModel] Add tests for missing super type, trycatch and hashCode
Bug: 207832084
Bug: 207812068
Bug: 207452750
Change-Id: Iea80fea273a66ce86e44a9525361b284e28aa6fa
diff --git a/src/test/java/com/android/tools/r8/softverification/FoundClass.java b/src/test/java/com/android/tools/r8/softverification/FoundClass.java
index cc25389..2165828 100644
--- a/src/test/java/com/android/tools/r8/softverification/FoundClass.java
+++ b/src/test/java/com/android/tools/r8/softverification/FoundClass.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.softverification;
-public class FoundClass {
+public class FoundClass extends RuntimeException {
public static int staticField = 42;
diff --git a/src/test/java/com/android/tools/r8/softverification/MissingClass.java b/src/test/java/com/android/tools/r8/softverification/MissingClass.java
index d653af7..189ba2b 100644
--- a/src/test/java/com/android/tools/r8/softverification/MissingClass.java
+++ b/src/test/java/com/android/tools/r8/softverification/MissingClass.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.softverification;
-public class MissingClass {
+public class MissingClass extends RuntimeException {
public static int staticField = 42;
diff --git a/src/test/java/com/android/tools/r8/softverification/MissingMember.java b/src/test/java/com/android/tools/r8/softverification/MissingMember.java
index 9fee087..8d9a2de 100644
--- a/src/test/java/com/android/tools/r8/softverification/MissingMember.java
+++ b/src/test/java/com/android/tools/r8/softverification/MissingMember.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.softverification;
-public class MissingMember {
+public class MissingMember extends RuntimeException {
public static int staticField = 42;
diff --git a/src/test/java/com/android/tools/r8/softverification/MissingSuperType.java b/src/test/java/com/android/tools/r8/softverification/MissingSuperType.java
new file mode 100644
index 0000000..e77ea01
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/softverification/MissingSuperType.java
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, 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.softverification;
+
+public class MissingSuperType extends MissingClass {
+
+ public static int staticField = 42;
+
+ public int instanceField = 42;
+
+ public static void staticMethod() {
+ System.out.println("MissingSuperType::staticMethod");
+ }
+
+ @Override
+ public void instanceMethod() {
+ System.out.println("MissingSuperType::instanceMethod");
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/softverification/TestHashCode.java b/src/test/java/com/android/tools/r8/softverification/TestHashCode.java
new file mode 100644
index 0000000..d856b71
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/softverification/TestHashCode.java
@@ -0,0 +1,26 @@
+// Copyright (c) 2021, 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.softverification;
+
+public class TestHashCode {
+
+ public static String run() {
+ return run(null);
+ }
+
+ public static String run(MissingClass missingClass) {
+ if (System.currentTimeMillis() == 0) {
+ missingClass.hashCode();
+ }
+ if (System.currentTimeMillis() == 0) {
+ missingClass.hashCode();
+ }
+ String currentString = "foobar";
+ for (int i = 0; i < 10; i++) {
+ currentString = "foobar" + (i + currentString.length());
+ }
+ return currentString;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/softverification/TestRunner.java b/src/test/java/com/android/tools/r8/softverification/TestRunner.java
index 6baef2a..dbe5ab1 100644
--- a/src/test/java/com/android/tools/r8/softverification/TestRunner.java
+++ b/src/test/java/com/android/tools/r8/softverification/TestRunner.java
@@ -47,9 +47,15 @@
measure.start("InstanceField");
TestInstanceField.run();
sb.append(measure.stop());
+ measure.start("HashCode");
+ TestHashCode.run();
+ sb.append(measure.stop());
measure.start("InstanceMethod");
TestInstanceMethod.run();
sb.append(measure.stop());
+ measure.start("TryCatch");
+ TestTryCatch.run();
+ sb.append(measure.stop());
return sb.toString();
}
diff --git a/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java b/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java
index 375f03f..c3f91db 100644
--- a/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java
+++ b/src/test/java/com/android/tools/r8/softverification/TestRunnerBuilder.java
@@ -74,8 +74,11 @@
private static final Path ANDROID_STUDIO_LIB_PATH = Paths.get("PATH_TO_PROJECT/libs/library.jar");
- private static final int COUNT = 1100;
+ private static final int COUNT = 800;
+ private static final List<Class<?>> referenceClasses =
+ ImmutableList.of(
+ MissingClass.class, MissingMember.class, FoundClass.class, MissingSuperType.class);
private static final List<Class<?>> testClasses =
ImmutableList.of(
TestCheckCast.class,
@@ -85,7 +88,9 @@
TestStaticField.class,
TestStaticMethod.class,
TestInstanceField.class,
- TestInstanceMethod.class);
+ TestInstanceMethod.class,
+ TestHashCode.class,
+ TestTryCatch.class);
private static final Collection<String> testClassBinaryNames =
ImmutableSet.copyOf(ListUtils.map(testClasses, TestBase::binaryName));
@@ -93,8 +98,7 @@
ZipBuilder builder = ZipBuilder.builder(path);
builder.addFilesRelative(
ToolHelper.getClassPathForTests(), ToolHelper.getClassFileForTestClass(Measure.class));
- for (Class<?> clazz :
- ImmutableList.of(MissingClass.class, MissingMember.class, FoundClass.class)) {
+ for (Class<?> clazz : referenceClasses) {
String postFix = clazz.getSimpleName();
int classCounter = 0;
for (int i = 0; i < COUNT; i++) {
@@ -168,6 +172,11 @@
.replaceClassDescriptorInMethodInstructions(
descriptor(MissingClass.class),
getDescriptorFromClassBinaryName(referenceBinaryName))
+ .transformTryCatchBlock(
+ "run",
+ (start, end, handler, type, visitor) -> {
+ visitor.visitTryCatchBlock(start, end, handler, referenceBinaryName);
+ })
.transform());
}
diff --git a/src/test/java/com/android/tools/r8/softverification/TestTryCatch.java b/src/test/java/com/android/tools/r8/softverification/TestTryCatch.java
new file mode 100644
index 0000000..4be92a3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/softverification/TestTryCatch.java
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, 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.softverification;
+
+public class TestTryCatch {
+
+ public static Object getObject() {
+ return new Object();
+ }
+
+ public static String run() {
+ try {
+ getObject();
+ } catch (MissingClass e) {
+ throw new RuntimeException("Foo");
+ }
+ String currentString = "foobar";
+ for (int i = 0; i < 10; i++) {
+ currentString = "foobar" + (i + currentString.length());
+ }
+ return currentString;
+ }
+}