RFR: 8298971: Move Console implementation into jdk internal package [v2]

Naoto Sato naoto at openjdk.org
Tue Dec 20 22:13:48 UTC 2022


On Tue, 20 Dec 2022 14:44:38 GMT, Jaikiran Pai <jpai at 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


More information about the core-libs-dev mailing list