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

Reply via email to