RFR: 8305457: Implement java.io.IO
Pavel Rappo
prappo at openjdk.org
Tue May 7 11:04:53 UTC 2024
On Tue, 7 May 2024 05:49:58 GMT, Rémi Forax <forax at openjdk.org> wrote:
>> Please review this PR which introduces the `java.io.IO` top-level class and three methods to `java.io.Console` for [Implicitly Declared Classes and Instance Main Methods (Third Preview)].
>>
>> This PR has been obtained as `git merge --squash` of a now obsolete [draft PR].
>>
>> [Implicitly Declared Classes and Instance Main Methods (Third Preview)]: https://bugs.openjdk.org/browse/JDK-8323335
>> [draft PR]: https://github.com/openjdk/jdk/pull/18921
>
> src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java line 74:
>
>> 72:
>> 73: @Override
>> 74: public String readln(String prompt) {
>
> this code can be simplified using an early return (and the body of the try/catch can be reduced so it is more clear which statement can cause the IOException)
>
> synchronized (writeLock) {
> synchronized(readLock) {
> if (!prompt.isEmpty()) {
> pw.print(prompt);
> pw.flush(); // automatic flushing does not cover print
> }
> char[] array;
> try {
> array = readline(false);
> } catch (IOException x) {
> throw new IOError(x);
> }
> if (array != null) {
> return new String(array);
> }
> }
> }
> return null;
This method started as a copy of `readLine`. In its current form, it's very evident how `readln` differs from `readLine`, and I would leave it this way for now. If the feature is standardised, we could refactor both methods together, as you suggested.
If the `java.io.IO` part of the feature or the feature itself is withdrawn, then we could consider refactoring the existing `readLine`. Does it make sense?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19112#discussion_r1592281687
More information about the core-libs-dev
mailing list