29 import jdk.jshell.SourceCodeAnalysis.Suggestion; |
29 import jdk.jshell.SourceCodeAnalysis.Suggestion; |
30 |
30 |
31 import java.awt.event.ActionListener; |
31 import java.awt.event.ActionListener; |
32 import java.io.IOException; |
32 import java.io.IOException; |
33 import java.io.InputStream; |
33 import java.io.InputStream; |
|
34 import java.io.InterruptedIOException; |
34 import java.io.PrintStream; |
35 import java.io.PrintStream; |
35 import java.io.UncheckedIOException; |
36 import java.io.UncheckedIOException; |
36 import java.lang.reflect.Method; |
37 import java.lang.reflect.Method; |
37 import java.util.ArrayList; |
38 import java.util.ArrayList; |
38 import java.util.Collection; |
39 import java.util.Collection; |
388 |
389 |
389 private byte[] inputBytes; |
390 private byte[] inputBytes; |
390 private int inputBytesPointer; |
391 private int inputBytesPointer; |
391 |
392 |
392 @Override |
393 @Override |
393 public synchronized int readUserInput() { |
394 public synchronized int readUserInput() throws IOException { |
394 while (inputBytes == null || inputBytes.length <= inputBytesPointer) { |
395 while (inputBytes == null || inputBytes.length <= inputBytesPointer) { |
395 boolean prevHandleUserInterrupt = in.getHandleUserInterrupt(); |
396 boolean prevHandleUserInterrupt = in.getHandleUserInterrupt(); |
396 History prevHistory = in.getHistory(); |
397 History prevHistory = in.getHistory(); |
397 |
398 |
398 try { |
399 try { |
399 input.setState(State.WAIT); |
400 input.setState(State.WAIT); |
400 in.setHandleUserInterrupt(true); |
401 in.setHandleUserInterrupt(true); |
401 in.setHistory(userInputHistory); |
402 in.setHistory(userInputHistory); |
402 inputBytes = (in.readLine("") + System.getProperty("line.separator")).getBytes(); |
403 inputBytes = (in.readLine("") + System.getProperty("line.separator")).getBytes(); |
403 inputBytesPointer = 0; |
404 inputBytesPointer = 0; |
404 } catch (IOException ex) { |
|
405 ex.printStackTrace(); |
|
406 return -1; |
|
407 } catch (UserInterruptException ex) { |
405 } catch (UserInterruptException ex) { |
408 repl.state.stop(); |
406 throw new InterruptedIOException(); |
409 return -1; |
|
410 } finally { |
407 } finally { |
411 in.setHistory(prevHistory); |
408 in.setHistory(prevHistory); |
412 in.setHandleUserInterrupt(prevHandleUserInterrupt); |
409 in.setHandleUserInterrupt(prevHandleUserInterrupt); |
413 input.setState(State.BUFFER); |
410 input.setState(State.BUFFER); |
414 } |
411 } |