On Fri, 25 Apr 2025 14:21:55 GMT, Chen Liang <li...@openjdk.org> wrote:
>> The record has fewer source lines but doesn't the generated record class >> have a getter, toString(), hashCode() and equals(Object) which are not >> needed here? >> What about using a lock parameter and a method handle to pass in the >> required features of PrintStream and PrintWriter: >> >> public void printStackTrace(PrintWriter pw) { >> printStackTrace(pw, pw::println); >> } >> >> public void printStackTrace(PrintStream ps) { >> printStackTrace(ps, ps::println); >> } >> >> private void printStackTrace(Object lock, Consumer<Object> println) { >> synchronized(lock) { >> ... >> println.accept(this); >> ... >> } >> } > > FYI lambda expressions depend on java.lang.invoke, and if anything > initialized before that throws an exception and needs to print stack trace, > the VM will fail with a traceless `StackOverflowError` I think. Consumer > class is fine for early loading, but to implement that, we fall back to > records again. Hmm, I just noticed we have `Appendable`; maybe we can reuse that... ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24795#discussion_r2060435819