Print stack trace of main thread in !isProcessed() assertion
Bug: 178235885
Change-Id: Ief3daaa1ca8903a50338fc6ed8a04e10326b5cfa
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 152d618..dd9bee9 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -1252,7 +1252,10 @@
}
assert !method.isProcessed() || !isDebugMode
- : "Method already processed: " + context.toSourceString();
+ : "Method already processed: "
+ + context.toSourceString()
+ + System.lineSeparator()
+ + ExceptionUtils.getMainStackTrace();
assert !method.isProcessed()
|| !appView.enableWholeProgramOptimizations()
|| !appView.appInfo().withLiveness().isNeverReprocessMethod(method.method)
diff --git a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
index 8c4da03..ef5c3ca 100644
--- a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
@@ -22,9 +22,20 @@
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
public abstract class ExceptionUtils {
+ public static String getMainStackTrace() {
+ return Thread.getAllStackTraces().entrySet().stream()
+ .filter(x -> x.getKey().getName().equals("main"))
+ .map(x -> x.getValue())
+ .flatMap(x -> Stream.of(x))
+ .map(x -> x.toString())
+ .collect(Collectors.joining(System.lineSeparator()));
+ }
+
public static void withConsumeResourceHandler(
Reporter reporter, StringConsumer consumer, String data) {
withConsumeResourceHandler(reporter, handler -> consumer.accept(data, handler));