RFR: JDK-8214491: Upgrade to JLine 3.9.0

Sundararajan Athijegannathan sundararajan.athijegannathan at oracle.com
Mon Dec 10 05:20:31 UTC 2018


I built jdk and ran nashorn tests with this patch. Two tests fail with 
this patch - but those tests pass without this patch:

    [testng] Test test/nashorn/script/nosecurity/JDK-8055034.js failed 
at line 1 -
    [testng]   expected: 'jjs> var x = Object.create(null);'
    [testng]      found: 'jjs> var x = Object.create(null)jjs> jjs> 
print('PASSED')PASSED'

    [testng] Test test/nashorn/script/nosecurity/JDK-8130127.js failed 
at line 5 -
    [testng]   expected: 'jjs> print('hello')'
    [testng]      found: 'jjs> print('hello')hello'

Both tests involving exec'ing jjs and comparing with the expected 
output. Either we need to add these to failing tests and/or address the 
issue before push.

Thanks,
-Sundar

On 10/12/18, 4:15 AM, Jan Lahoda wrote:
> On 9.12.2018 16:40, Robert Field wrote:
>> Ok. Go ahead and incorporate the text.  I'll make a separate bug to sync
>> the representation of keys in the other help entries.
>
> An updated patch (with your text):
> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.03/
> Delta from previous patch:
> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.02.03/
>
> Thanks for the comments and for the text! Any feedback is welcome.
>
> Thanks,
>     Jan
>
>
>>
>> Robert
>>
>>
>> On December 9, 2018 6:36:26 AM Jan Lahoda <jan.lahoda at oracle.com> wrote:
>>
>>> Hi Robert,
>>>
>>> On 9.12.2018 02:40, Robert Field wrote:
>>>> OK, here is my thinking on a /help keys entry.  Note: I'm using the
>>>
>>> I think this looks great!
>>>
>>>> representation for keys used by the User's Guide -- which I assume is
>>>> the official tech pubs style -- seems we should be consistent; If 
>>>> we are
>>>> however, the other /help entries should be brought into compliance 
>>>> (they
>>>> seem to be all over the map already).  May make sense to spin this off
>>>> as a separate bug, which I'd be happy to take on.
>>>
>>> I'm happy with a separate bug, if you prefer/are OK with that. Or I can
>>> incorporate the text into upgrade patch, whichever you prefer.
>>>
>>> I've updated my current patch with only a rename "editing" -> "keys" 
>>> and
>>> the fix to the jshell tool name:
>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.02/
>>>
>>> Delta from last:
>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.01.02/
>>>
>>> Jan
>>>
>>>>
>>>> Comments welcome ---
>>>>
>>>> __________________________________________________________________________________________________________________________ 
>>>>
>>>>
>>>>
>>>>
>>>> /help keys
>>>> ==========
>>>>
>>>> The jshell tool provides line editing support to allow you to navigate
>>>> within and edit snippets and commands. The current command/snippet can
>>>> be edited, or prior commands/snippets can be retrieved from history,
>>>> edited, and executed. This support is similar to readline/editline 
>>>> with
>>>> simple emacs-like bindings.  There are also jshell tool specific key
>>>> sequences.
>>>>
>>>> --- Line and history navigation ---
>>>>
>>>> Return
>>>>    Enters the current snippet
>>>> Left-arrow or Ctrl+B
>>>>    Moves backward one character
>>>> Right-arrow or Ctrl+F
>>>>    Moves forward one character
>>>> Up-arrow or Ctrl+P
>>>>    Moves up one line, backward through history
>>>> Down arrow or Ctrl+N
>>>>    Moves down one line, forward through history
>>>> Ctrl+A
>>>>    Moves to the beginning of the line
>>>> Ctrl+E
>>>>    Moves to the end of the line
>>>> Meta+B
>>>>    Moves backward one word
>>>> Meta+F
>>>>    Moves forward one word
>>>> Ctrl+R
>>>>    Search backward through history
>>>>
>>>>
>>>> --- Line and history basic editing ---
>>>>
>>>> Meta+Return or Ctrl+Return (depending on platform)
>>>>    Insert a new line in snippet
>>>> Ctrl+_ (underscore may require shift key) or Ctrl-X then Ctrl-U
>>>>    Undo edit - repeat to undo more edits
>>>> Delete
>>>>    Deletes the character at or after the cursor, depending on the
>>>> operating system
>>>> Backspace
>>>>    Deletes the character before the cursor
>>>> Ctrl+K
>>>>    Deletes the text from the cursor to the end of the line
>>>> Meta+D
>>>>    Deletes the text from the cursor to the end of the word
>>>> Ctrl+W
>>>>    Deletes the text from the cursor to the previous white space
>>>> Ctrl+Y
>>>>    Pastes the most recently deleted text into the line
>>>> Meta+Y
>>>>    After Ctrl+Y, Meta+Y cycles through previously deleted text
>>>> Ctrl+X then Ctrl+K
>>>>    Delete whole snippet
>>>>
>>>>
>>>> --- Shortcuts for jshell tool ---
>>>>
>>>> For details, see: /help shortcuts
>>>>
>>>> Tab
>>>>    Complete Java identifier or jshell command
>>>> Shift+Tab then v
>>>>    Convert expression to variable declaration
>>>> Shift+Tab then m
>>>>    Convert statement to method declaration
>>>> Shift+Tab then i
>>>>    Add imports for this identifier
>>>>
>>>>
>>>> --- More line and history editing ---
>>>>
>>>> Ctrl+L
>>>>    Clear screen and reprint snippet
>>>> Ctrl+U
>>>>    Kill whole line
>>>> Ctrl+T
>>>>    Transpose characters
>>>> Ctrl+X then Ctrl+B
>>>>    Navigate to matching bracket, parenthesis, ...
>>>> Ctrl+X then =
>>>>    Enter show current character position mode
>>>> Ctrl+X then Ctrl+O
>>>>    Toggle overwrite characters vs insert characters
>>>> Meta+C
>>>>    Capitalize word
>>>> Meta+U
>>>>    Convert word to uppercase
>>>> Meta+L
>>>>    Convert word to lowercase
>>>> Meta+0 through Meta+9 then key
>>>>    Repeat the specified number of times
>>>>
>>>> Where, for example, "Ctrl+A" means hold down the control key and
>>>> press A.
>>>> Where "Meta" is "Alt" on many keyboards.
>>>> Line editing support is derived from JLine 3.
>>>>
>>>> _______________________________________________________________________________ 
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> -Robert
>>>>
>>>>
>>>>
>>>> On 12/8/18 11:47 AM, Jan Lahoda wrote:
>>>>> On 8.12.2018 20:39, Robert Field wrote:
>>>>>> Thanks for updating.
>>>>>>
>>>>>> Good to have /help for line editing keys, however:
>>>>>>    (1) The supported keys should be listed without requiring that 
>>>>>> the
>>>>>> user knows or looks-up readline. More so, since only some readline
>>>>>> keys
>>>>>> are supposed.
>>>>>>    (2) "/edit" is a command, so with this change, typing "/help 
>>>>>> edit"
>>>>>> would give both the /edit and editing help -- which would be
>>>>>> confusing.
>>>>>> I suggest "/help keys", there are no "k" help items.
>>>>>
>>>>> Will do.
>>>>>
>>>>>>    (3) In jshell tool online docs the tool is spelled "jshell tool"
>>>>>> I'd be happy to write up suggested text.
>>>>>
>>>>> Thanks, that would be very welcome!
>>>>>
>>>>>>
>>>>>> As to the alternative patch: I understand the motivation, it 
>>>>>> would be
>>>>>> nice to just use the natural "Enter" as new line. Unfortunately it's
>>>>>> functionality is then overloaded.  I believe the alternative will be
>>>>>> confusing and awkward:
>>>>>>    (1) It breaks backward compatibility in user experience, Enter 
>>>>>> has
>>>>>> always been accept/evaluate
>>>>>>    (2) It would be very awkward and non-intuitive (particularly in a
>>>>>> long multiline snippet) to have to navigate to the end of the
>>>>>> snippet to
>>>>>> accept.
>>>>>>         Note: must be the end both vertically and horizontally.
>>>>>>    (3) It is inconsistent: Mid snippet Enter on one line does 
>>>>>> accept.
>>>>>> However, on a continuation line (say after "int x =") it adds a new
>>>>>> line
>>>>>> instead.
>>>>>>    (4) It doesn't solve the problem for the most common location for
>>>>>> adding a new line, the end of snippet -- thus introducing more
>>>>>> inconsistency.
>>>>>
>>>>> Ok. This was meant more as a backup in case there's no reasonable
>>>>> shortcut we could use to add new lines.
>>>>>
>>>>> Thanks for the comments!
>>>>>
>>>>> Jan
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Robert
>>>>>>
>>>>>>
>>>>>> On 12/8/18 7:21 AM, Jan Lahoda wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I've updated the patch to reflect the comments so far, the current
>>>>>>> version is here:
>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.01/
>>>>>>> Delta since the previous version is here for convenience:
>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.00.01/
>>>>>>>
>>>>>>> In this version, while editing a snippet, a new line can be added
>>>>>>> using Alt-Enter (on platforms that support that), or Ctrl-Enter (on
>>>>>>> Windows).
>>>>>>>
>>>>>>>
>>>>>>> And alternative patch is here:
>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.01a/
>>>>>>> Delta:
>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.00.01a/
>>>>>>>
>>>>>>> In the alternative version, Enter will only "confirm" multi-line
>>>>>>> snippet when the cursor is at the end of the snippet, otherwise it
>>>>>>> will add a new line (so that a special shortcut is not needed; 
>>>>>>> but a
>>>>>>> snippet cannot be "confirmed" by pressing Enter in the middle of a
>>>>>>> multi-line snippet.)
>>>>>>>
>>>>>>> The only difference between the .01 and .01a patches is the way 
>>>>>>> they
>>>>>>> allow to add new lines into the multi-line snippets. Other changes
>>>>>>> are
>>>>>>> the same.
>>>>>>>
>>>>>>> Any feedback on this is welcome.
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>> Jan
>>>>>>>
>>>>>>> On 5.12.2018 18:18, Jan Lahoda wrote:
>>>>>>>> Hi Robert,
>>>>>>>>
>>>>>>>> On 4.12.2018 23:59, Robert Field wrote:
>>>>>>>>> I saw no issues with JShell tool and test portions of the
>>>>>>>>> webrev.  I
>>>>>>>>> did
>>>>>>>>> not review the nashorn changes.
>>>>>>>>
>>>>>>>> Thanks for looking at this!
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Testing it: editing multi-line snippets is vastly easier and more
>>>>>>>>> intuitive.
>>>>>>>>> There is one issue, with the old mechanism, as horridly clunky
>>>>>>>>> as it
>>>>>>>>> was, you could add new lines of code (a frequently needed
>>>>>>>>> functionality).
>>>>>>>>> Since <return> is accept, I could find no way to add lines with
>>>>>>>>> this
>>>>>>>>> JLine 3 version.  Thoughts?
>>>>>>>>
>>>>>>>> One possibility that comes to mind: pressing Enter inside the
>>>>>>>> snippet
>>>>>>>> would add a new line, Enter at the very end of a (complete) 
>>>>>>>> snippet
>>>>>>>> would confirm that snippet. Could be fairly convenient/intuitive.
>>>>>>>> What
>>>>>>>> do you think?
>>>>>>>>
>>>>>>>>>
>>>>>>>>> I looked into readline commands as an approach to addressing 
>>>>>>>>> this,
>>>>>>>>> found
>>>>>>>>> nothing.  However, most readline commands worked. Ctrl-u however
>>>>>>>>> did
>>>>>>>>> not
>>>>>>>>> behave as documented in readline (instead deleting to the
>>>>>>>>> beginning of
>>>>>>>>> the line).  I notice that the there is zero in-command
>>>>>>>>> documentation of
>>>>>>>>> command-line editing -- not even a mention.  Independent from the
>>>>>>>>> review
>>>>>>>>> of this port, it seems we should have in-command documentation of
>>>>>>>>> command editing -- even more so now that multiline editing is
>>>>>>>>> useful.
>>>>>>>>
>>>>>>>> This is about enhancing /help, right? I'll see what I can do.
>>>>>>>>
>>>>>>>>>
>>>>>>>>> The JShell User Manual will also need a little edit in the 
>>>>>>>>> History
>>>>>>>>> Navigation section.
>>>>>>>>
>>>>>>>> Where is that?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>      Jan
>>>>>>>>
>>>>>>>>>
>>>>>>>>> -Robert
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 11/29/18 1:06 PM, Jan Lahoda wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I'd like to update the internal JLine used by JShell and jjs to
>>>>>>>>>> JLine
>>>>>>>>>> 3.9.0. Two notable advantages of this version is multi-line
>>>>>>>>>> snippet
>>>>>>>>>> editing and better UI on Windows (escape sequence support on
>>>>>>>>>> Windows).
>>>>>>>>>> As a consequence, this patch drops EditingHistory, as it does 
>>>>>>>>>> not
>>>>>>>>>> seem
>>>>>>>>>> to be needed anymore.
>>>>>>>>>>
>>>>>>>>>> JBS:
>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8214491
>>>>>>>>>>
>>>>>>>>>> The full patch is here:
>>>>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.00/
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> To make the changes more clear, I've split it into two:
>>>>>>>>>> -replacement of existing JLine with the new on in
>>>>>>>>>> jdk.internal.le, no
>>>>>>>>>> changes to JLine code:
>>>>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.00.replace/
>>>>>>>>>>
>>>>>>>>>> -tweaks to JLine (repackaging, eliminating references to
>>>>>>>>>> j.u.l.Logger,
>>>>>>>>>> adding hooks to wrap input streams with our stop-detecting input
>>>>>>>>>> stream, adding unicode escapes to unicode characters, support 
>>>>>>>>>> for
>>>>>>>>>> Windows without JNA), adjustments to JShell and jjs
>>>>>>>>>> (unfortunately,
>>>>>>>>>> 3.9.0 is not compatible with the JLine 2 branch, so the changes
>>>>>>>>>> are
>>>>>>>>>> substantial):
>>>>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.00.update/
>>>>>>>>>>
>>>>>>>>>> Any feedback is welcome!
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>>     Jan
>>
>>
>>


More information about the kulla-dev mailing list