RFR: 8182297: jshell tool: pasting multiple lines of code truncated

Jan Lahoda jan.lahoda at oracle.com
Tue Jun 27 18:14:20 UTC 2017


Hi,

Currently, when pasting multiple lines into JShell, only the first two 
lines are used.

The cause is that when 
jdk.internal.jline.console.ConsoleReader.readLine, we need to read the 
cursor position. This is e.g. to avoid backspacing into the prompt. I 
believe standard JLine is solving this by determining the length of the 
prompt, but that does not work well for JShell, as the prompt is not 
always known (e.g. when using System.in).

So, there's a code to query the cursor position - this is done by 
writing a query to the terminal and reading the answer from the standard 
input.

But if there's something in the standard input before the answer, it 
needs to be read as well. So, this is read and stored in a queue/stack, 
but the problem is that the stack is a local variable in the readLine 
method. So only one line of the input is used and the rest is dropped. 
The reason why two lines are used after paste is that the above happens 
for the second pasted line; the measurements for the first line are 
usually already done for the first line, which is not so affected.

The proposed solution is to store the todo stack in a field.

Bug:
https://bugs.openjdk.java.net/browse/JDK-8182297

Webrev:
jdk repository:
http://cr.openjdk.java.net/~jlahoda/8182297/jdk.00/
langtools repository (test):
http://cr.openjdk.java.net/~jlahoda/8182297/langtools.00/

Thanks,
    Jan


More information about the kulla-dev mailing list