Print retraced stack-trace on test-error

Change-Id: Idfbf5d0a1d40039319b5217daf9fca29fef9e5c1
diff --git a/build.gradle b/build.gradle
index d2df8f8..8ff95c8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1421,6 +1421,30 @@
     outputs.dir r8LibTestPath
 }
 
+def printStackTrace(TestResult result) {
+    if (project.hasProperty('r8lib') || project.hasProperty('r8lib_no_deps')) {
+        def out = new StringBuffer()
+        def err = new StringBuffer()
+        def command = "tools/retrace.py"
+        out.append("\n--------------------------------------\n")
+        out.append("RETRACED STACKTRACE\n")
+        out.append("--------------------------------------\n")
+        Process process = command.execute()
+        def processIn = new PrintStream(process.getOut())
+        process.consumeProcessOutput(out, err)
+        result.exception.printStackTrace(processIn)
+        processIn.flush()
+        processIn.close()
+        process.waitFor()
+        out.append("\n\n--------------------------------------\n")
+        out.append("OBFUSCATED STACKTRACE\n")
+        out.append("--------------------------------------\n")
+        result.exceptions.add(0, new Exception(out.toString()))
+    } else {
+        result.exception.printStackTrace()
+    }
+}
+
 test {
     if (project.hasProperty('generate_golden_files_to')) {
         systemProperty 'generate_golden_files_to', project.property('generate_golden_files_to')
@@ -1459,7 +1483,7 @@
         }
         afterTest { desc, result ->
             if (result.resultType == TestResult.ResultType.FAILURE) {
-                 result.exception.printStackTrace()
+                printStackTrace(result)
             }
             if (project.hasProperty('update_test_timestamp')) {
                 file(project.getProperty('update_test_timestamp')).text = new Date().getTime()
@@ -1469,7 +1493,7 @@
     } else {
         afterTest { desc, result ->
             if (result.resultType == TestResult.ResultType.FAILURE) {
-                 result.exception.printStackTrace()
+                printStackTrace(result)
             }
         }
     }