[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