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

>> 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
> 
>     }
> 
> 
> }

Thanks, Jai. Yes, the reason I dropped those `final`s were they are not final. 
Anyway I got rid of `JdkConsoleProviderImpl` altogether, as we know this is the 
last resort impl, so no need to have `ServiceLoader` to instantiate it.

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

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

Reply via email to