[Retrace] Add test for no message after NPE
Bug: b/300416467
Change-Id: Ib45eb16dab5549aa07510639b9824d1e05baea91
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index c1e939d..984d8e2 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -47,6 +47,7 @@
import com.android.tools.r8.retrace.stacktraces.InlineNoLineNumberStackTrace;
import com.android.tools.r8.retrace.stacktraces.InlineNoLineWithBaseEntryNumberAssumeNoInlineStackTrace;
import com.android.tools.r8.retrace.stacktraces.InlinePreambleNoOriginalStackTrace;
+import com.android.tools.r8.retrace.stacktraces.InlineRemoveFrameJava17StackTrace;
import com.android.tools.r8.retrace.stacktraces.InlineSourceFileContextStackTrace;
import com.android.tools.r8.retrace.stacktraces.InlineSourceFileStackTrace;
import com.android.tools.r8.retrace.stacktraces.InlineWithLineNumbersStackTrace;
@@ -317,6 +318,11 @@
}
@Test
+ public void testInlineRemoveFrameJava17StackTrace() throws Exception {
+ runRetraceTest(new InlineRemoveFrameJava17StackTrace());
+ }
+
+ @Test
public void testColonInSourceFileNameStackTrace() throws Exception {
runRetraceTest(new ColonInFileNameStackTrace());
}
diff --git a/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineRemoveFrameJava17StackTrace.java b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineRemoveFrameJava17StackTrace.java
new file mode 100644
index 0000000..7d30160
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/retrace/stacktraces/InlineRemoveFrameJava17StackTrace.java
@@ -0,0 +1,63 @@
+// Copyright (c) 2023, 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.retrace.stacktraces;
+
+import com.android.tools.r8.utils.StringUtils;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Manually throwing an NPE has a different syntax than it happening where there is no message
+ * afterwards.
+ */
+public class InlineRemoveFrameJava17StackTrace implements StackTraceForTest {
+
+ @Override
+ public List<String> obfuscatedStackTrace() {
+ return Arrays.asList(
+ "java.lang.NullPointerException", "\tat A.a(SourceFile:1)", "\tat A.main(SourceFile:1)");
+ }
+
+ @Override
+ public String mapping() {
+ return StringUtils.joinLines(
+ "# {'id':'com.android.tools.r8.mapping','version':'2.2'}",
+ "foo.Class -> A:",
+ " 1:5:void inlinable():90:90 -> a",
+ " 1:5:void caller():97 -> a",
+ " # {'id':'com.android.tools.r8.rewriteFrame',"
+ + "'conditions':['throws(Ljava/lang/NullPointerException;)'],"
+ + "'actions':['removeInnerFrames(1)']}",
+ " 1:5:void outerCaller():107 -> a",
+ " 1:1:void main():111:111 -> main");
+ }
+
+ @Override
+ public List<String> retracedStackTrace() {
+ return Arrays.asList(
+ "java.lang.NullPointerException",
+ // TODO(b/300416467): The topmost inner frame should be removed.
+ "\tat foo.Class.inlinable(Class.java:90)",
+ "\tat foo.Class.caller(Class.java:97)",
+ "\tat foo.Class.outerCaller(Class.java:107)",
+ "\tat foo.Class.main(Class.java:111)");
+ }
+
+ @Override
+ public List<String> retraceVerboseStackTrace() {
+ return Arrays.asList(
+ "java.lang.NullPointerException",
+ // TODO(b/300416467): The topmost inner frame should be removed.
+ "\tat foo.Class.void inlinable()(Class.java:90)",
+ "\tat foo.Class.void caller()(Class.java:97)",
+ "\tat foo.Class.void outerCaller()(Class.java:107)",
+ "\tat foo.Class.void main()(Class.java:111)");
+ }
+
+ @Override
+ public int expectedWarnings() {
+ return 0;
+ }
+}