[jdk21u-dev] RFR: 8327476: Upgrade JLine to 3.26.1
Goetz Lindenmaier
goetz at openjdk.org
Thu Feb 20 15:07:21 UTC 2025
I backport this change for parity with 21.0.7-oracle.
It brings updates of upstream library jline 3.26.1 to jdk21.
Jdk21 currently includes jline 3.22.0, see [JDK-8297587](https://bugs.openjdk.org/browse/JDK-8297587).
The original sources of jline 3.26.1 can be found here:
https://github.com/jline/jline3/archive/refs/tags/jline-parent-3.26.1.tar.gz
The backport of this change needed larger adaptions.
The original jline library dynamically selects how to access
the operating system in two means:
* Which operating system? linux, windows, mac?
* JDK functionality to do native calls: JNI, jna, ffm?
The implementation in OpenJDK does this selection at JDK build time.
The code is split into more subdirectories for the operating systems.
One of the methods to call native is picked, the code for the others
is removed. Unfortunately this differs for the JDK releases:
* jdk21 uses jna.
* jdk23 uses ffm.
The original patch of this change includes all the edits to
replace jna by ffm.
Further changes that fell into the eye during the backport
* jline changed the format of its Copyright header
* jline changed sorting of imports
* jline changed a lot of formatting, especially how
arguments to methods are listed.
* jline removed the `Stream` enum from `TerminalProvider.java` and moved it
into a class of its own: `SystemStream.java`. This makes changes to
import statements and argument lists necessary.
* OpenJDK added a new parameter `inputStreamWrapper` to the
functions which are also affected by the `Stream` enum change.
This also made changes to import statements and argument lists
necessary.
OpenJDK 23 added jline to the list of modules needed for a jre.
I don't think we should do that in 21, so I omitted that change.
jline 3.26.1 and OpenJDK 23 added a new method `systemStreamWidth() `to `TerminalProvider`.
I don't think we should extend the functionlaity of jline in 21,
so I omitted this. Also, I would need additional parts of the
jline windows files that are not yet included in OpenJDK to
implement this.
For the backport, I dropped the following files from the patch:
```
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/CLibrary.java
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/FfmNativePty.java
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/FfmTerminalProvider.java
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/Kernel32.java
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/NativeWinConsoleWriter.java
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/NativeWinSysTerminal.java
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/ffm/WindowsAnsiWriter.java
Also, I did not remove the following files as the original change did:
```
make/modules/jdk.internal.le/Lib.gmk
src/jdk.internal.le/aix/classes/jdk/internal/org/jline/terminal/impl/jna/JDKNativePty.java
src/jdk.internal.le/linux/classes/jdk/internal/org/jline/terminal/impl/jna/JDKNativePty.java
src/jdk.internal.le/linux/classes/jdk/internal/org/jline/terminal/impl/jna/linux/CLibrary.java
src/jdk.internal.le/linux/classes/jdk/internal/org/jline/terminal/impl/jna/linux/CLibraryImpl.java
src/jdk.internal.le/linux/classes/jdk/internal/org/jline/terminal/impl/jna/linux/LinuxNativePty.java
src/jdk.internal.le/linux/classes/jdk/internal/org/jline/terminal/impl/jna/linux/UtilLibraryImpl.java
src/jdk.internal.le/linux/native/lible/CLibrary.cpp
src/jdk.internal.le/macosx/classes/jdk/internal/org/jline/terminal/impl/jna/JDKNativePty.java
src/jdk.internal.le/macosx/classes/jdk/internal/org/jline/terminal/impl/jna/osx/CLibrary.java
src/jdk.internal.le/macosx/classes/jdk/internal/org/jline/terminal/impl/jna/osx/CLibraryImpl.java
src/jdk.internal.le/macosx/classes/jdk/internal/org/jline/terminal/impl/jna/osx/NativeLong.java
src/jdk.internal.le/macosx/classes/jdk/internal/org/jline/terminal/impl/jna/osx/OsXNativePty.java
src/jdk.internal.le/macosx/native/lible/CLibrary.cpp
src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/jna/LastErrorException.java
src/jdk.internal.le/unix/classes/jdk/internal/org/jline/terminal/impl/jna/JnaNativePty.java
src/jdk.internal.le/unix/classes/jdk/internal/org/jline/terminal/impl/jna/JnaTerminalProvider.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/JnaTerminalProvider.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/IntByReference.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/JnaWinConsoleWriter.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/JnaWinSysTerminal.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/Kernel32.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/Kernel32Impl.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/Pointer.java
src/jdk.internal.le/windows/classes/jdk/internal/org/jline/terminal/impl/jna/win/WindowsAnsiWriter.java
src/jdk.internal.le/windows/native/lible/Kernel32.cpp
I added the changes for the new parameter "`inputStreamWrapper`" in the jna files.
I patched all differences between jline 3.22.0 and 3.26.1 into the jna files
that were deleted in the original change for jdk23, as far as there is a direct
relation between OpenJDK 21 and upstream jline.
I split the changes needed on top of the origin patch into several commits.
-------------
Commit messages:
- Adapt jdk21 jna parts to changes from OpenJDk head and from jline 3.26.1
- Don't add new method systemStreamWidth()
- Dont put jline into jre, keep the status of 21
- Backport aaa90b3005c85852971203ce6feb88e7091e167b
Changes: https://git.openjdk.org/jdk21u-dev/pull/1413/files
Webrev: https://webrevs.openjdk.org/?repo=jdk21u-dev&pr=1413&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8327476
Stats: 6858 lines in 126 files changed: 3024 ins; 1089 del; 2745 mod
Patch: https://git.openjdk.org/jdk21u-dev/pull/1413.diff
Fetch: git fetch https://git.openjdk.org/jdk21u-dev.git pull/1413/head:pull/1413
PR: https://git.openjdk.org/jdk21u-dev/pull/1413
More information about the jdk-updates-dev
mailing list