langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java
changeset 41628 664e7664343d
parent 40767 c7908e8c786b
child 41631 a348d1cc8d9d
equal deleted inserted replaced
41529:9aadd2163b56 41628:664e7664343d
    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             }