On Fri, 25 Apr 2025 07:06:05 GMT, Alan Bateman <al...@openjdk.org> wrote:
>>> What should we replace it with? Do you have any suggestions? >> >> The wrapper classes were needed when there were was a mix of synchronized >> and j.u.concurrent locks in use. With JEP 491 integrated it meant that the >> java.io classes could be changed back to use synchronized. Yes, we could do >> some cleanup in Throwable too. Changing PrintStreamOrWriter to be an >> interface should be fine but the rest of these changes in this PR doesn't >> seem necessary. As others have already asked, I think it would be useful to >> understand what issue you are running into and why you want to change this >> code. > >> @AlanBateman I have modified it to use interface + record. Is this what you >> want? > > I don't object to changing it to interface + record but it feels more like > needless code churn. I really disliked the next version that used > printStackTrace0(Object printer) as it immediately invites another re-write. 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); ... } } ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24795#discussion_r2059745913