@NotNull private static String renderStackTrace(@NotNull Throwable cause) { StackTraceElement[] oldTrace = cause.getStackTrace(); List<StackTraceElement> newTrace = new ArrayList<StackTraceElement>(); boolean skip = true; for (int i = oldTrace.length - 1; i >= 0; i--) { StackTraceElement element = oldTrace[i]; // All our code happens in the script constructor, and no reflection/native code happens in // constructors. // So we ignore everything in the stack trace until the first constructor if (element.getMethodName().equals("<init>")) { skip = false; } if (!skip) { newTrace.add(element); } } Collections.reverse(newTrace); cause.setStackTrace(newTrace.toArray(new StackTraceElement[newTrace.size()])); return Throwables.getStackTraceAsString(cause); }