On Thu, 28 Jul 2022 01:23:53 GMT, David Schlosnagle <[email protected]> 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