From 6cdde0f9e4c222f34694b8e0b671688711da5976 Mon Sep 17 00:00:00 2001 From: Arkan Emberwalker Date: Fri, 10 Apr 2015 14:17:27 +0100 Subject: [PATCH] Patch TracingPrintStream to handle Kotlin IO. Kotlins internal IO suite wraps the old System.out style, so descend deeper in the stack when kotlin.io is detected. --- .../net/minecraftforge/fml/common/TracingPrintStream.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fml/src/main/java/net/minecraftforge/fml/common/TracingPrintStream.java b/fml/src/main/java/net/minecraftforge/fml/common/TracingPrintStream.java index 90e4b13d5..2187c9d3e 100644 --- a/fml/src/main/java/net/minecraftforge/fml/common/TracingPrintStream.java +++ b/fml/src/main/java/net/minecraftforge/fml/common/TracingPrintStream.java @@ -21,6 +21,7 @@ import org.apache.logging.log4j.Logger; public class TracingPrintStream extends PrintStream { private Logger logger; + private int BASE_DEPTH = 3; public TracingPrintStream(Logger logger, PrintStream original) { super(original); @@ -39,7 +40,10 @@ public class TracingPrintStream extends PrintStream { private String getPrefix() { StackTraceElement[] elems = Thread.currentThread().getStackTrace(); - StackTraceElement elem = elems[3]; // The caller is always at depth 2, plus this call. + StackTraceElement elem = elems[BASE_DEPTH]; // The caller is always at BASE_DEPTH, including this call. + if (elem.getClassName().startsWith("kotlin.io.")) { + elem = elems[BASE_DEPTH + 2]; // Kotlins IoPackage masks origins 2 deeper in the stack. + } return "[" + elem.getClassName() + ":" + elem.getMethodName() + ":" + elem.getLineNumber() + "]: "; }