On Tue, 20 Dec 2022 14:37:10 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java line 179:
>> 
>>> 177:     private Writer out;
>>> 178:     private PrintWriter pw;
>>> 179:     private Formatter formatter;
>> 
>> Hello Naoto, I think some of these can be made `final`.
>
> Actually, I see that it isn't possible for these to be final because we set 
> these up in the `console(...)` instance method of this class. That's because 
> this `JdkConsoleImpl` implements both the `JdkConsole` interface and the 
> `JdkConsoleProvider` interface.

Do you think we could separate out this class into 2 separate implementations? 
Just like we do in the `jdk.internal.org.jline.JdkConsoleProviderImpl`? That 
could perhaps make this implementation similar to that other one and a bit 
simpler? So something like:


package jdk.internal.io;
public final class JdkConsoleProviderImpl implements JdkConsoleProvider {
        
        private static volatile JdkConsole INSTANCE;

        @Override
    public JdkConsole console(boolean isTTY, Charset charset) {
        .....
        // construct and return a (JdkConsoleImpl instance)
    }

    public static synchronized JdkConsole getJdkConsole(Charset cs) {
        return INSTANCE != null ? INSTANCE : new JdkConsoleImpl(cs);
    }

    private static final class JdkConsoleImpl implements JdkConsole {
        private final Charset charset;
        private final Object readLock;
            private final Object writeLock;
            private final Reader reader;
            private final Writer out;
            private final PrintWriter pw;
            private final Formatter formatter;
            private char[] rcb;
            private boolean restoreEcho;
            private boolean shutdownHookInstalled;


            private JdkConsoleImpl(Charset cs) {
                this.charset = cs;
                ....
            }

            // other methods from JdkConsole

    }


}

-------------

PR: https://git.openjdk.org/jdk/pull/11729

Reply via email to