On Thu, 28 Jul 2022 01:23:53 GMT, David Schlosnagle <d...@openjdk.org> wrote:
>> src/java.base/share/classes/java/lang/StackTraceElement.java line 374: >> >>> 372: * @throws IOException If an I/O error occurs >>> 373: */ >>> 374: private void appendTo(Appendable dest) throws IOException { >> >> Perhaps this could be package-private for reuse by >> `Throwable.printStackTrace`, avoiding the intermediate toString. > > Yes, I think the `PrintStreamOrWriter` could implement `Appendable` as both > `PrintStream` and `PrintWriter` implement `Appendable`. > > https://github.com/openjdk/jdk/blob/348a0521e1cd602c4093955310f838cf4ce4daae/src/java.base/share/classes/java/lang/Throwable.java#L756 > > This would also potentially allow optimizing away the additional intermediate > strings from prefixing the lines with `"\tat "` concatenated with the > `StackTraceElement.toString()` > > https://github.com/openjdk/jdk/blob/348a0521e1cd602c4093955310f838cf4ce4daae/src/java.base/share/classes/java/lang/Throwable.java#L686-L687 > > https://github.com/openjdk/jdk/blob/348a0521e1cd602c4093955310f838cf4ce4daae/src/java.base/share/classes/java/lang/Throwable.java#L724-L725 Just making notes for the future: having `PrintStreamOrWriter implement Appendable` works, but slightly messy due to `append` methods throwing checked `IOException` so these would likely need to catch & ignore. Given `Throwable.printStackTrace` is typically on an error handling path, if the `PrintStreamOrWriter` error stream/writer is not functioning properly, I imagine one would want to know but may be prevented from knowing. ------------- PR: https://git.openjdk.org/jdk/pull/9665