Module jdk.jshell
Package jdk.jshell.execution

# Class Util

java.lang.Object
jdk.jshell.execution.Util

    public class Util
    extends Object

Miscellaneous utility methods for setting-up implementations of `ExecutionControl`. Particularly implementations with remote execution.

Since:
  9

## Method Summary

Modifier and Type | Method | Description
--- | --- | ---
`static void` | `detectJdiExitEvent​(VirtualMachine vm, Consumer<String> unbiddenExitHandler)` | Monitor the JDI event stream for `VMDeathEvent` and `VMDisconnectEvent`.
`static void` | `forwardExecutionControl​(ExecutionControl ec, ObjectInput in, ObjectOutput out)` | Forward commands from the input to the specified `ExecutionControl` instance, then responses back on the output.
`static void` | `forwardExecutionControlAndIO​(ExecutionControl ec, InputStream inStream, OutputStream outStream, Map<String,​Consumer<OutputStream>> outputStreamMap, Map<String,​Consumer<InputStream>> inputStreamMap)` | Forward commands from the input to the specified `ExecutionControl` instance, then responses back on the output.
`static ExecutionControl` | `remoteInputOutput​(InputStream input, OutputStream output, Map<String,​OutputStream> outputStreamMap, Map<String,​InputStream> inputStreamMap, BiFunction<ObjectInput,​ObjectOutput,​ExecutionControl> factory)` | Creates an ExecutionControl for given packetized input and output.

### Methods declared in class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### forwardExecutionControl

public static void forwardExecutionControl​(ExecutionControl ec, ObjectInput in, ObjectOutput out)
Forward commands from the input to the specified `ExecutionControl` instance, then responses back on the output.

Parameters:
  `ec` - the direct instance of `ExecutionControl` to process commands
  `in` - the command input
  `out` - the command response output

### forwardExecutionControlAndIO

public static void forwardExecutionControlAndIO​(ExecutionControl ec, InputStream inStream, OutputStream outStream, Map<String,​Consumer<OutputStream>> outputStreamMap, Map<String,​Consumer<InputStream>> inputStreamMap) throws IOException
Forward commands from the input to the specified `ExecutionControl` instance, then responses back on the output.

Parameters:
  `ec` - the direct instance of `ExecutionControl` to process commands
  `inStream` - the stream from which to create the command input
  `outStream` - the stream that will carry any specified auxiliary channels (like `System.out` and `System.err`), and the command response output.
  `outputStreamMap` - a map between names of additional streams to carry and setters for the stream. Names starting with '$' are reserved for internal use.
  `inputStreamMap` - a map between names of additional streams to carry and setters for the stream. Names starting with '$' are reserved for internal use.
Throws:
  `IOException` - if there are errors using the passed streams

### remoteInputOutput

public static ExecutionControl remoteInputOutput​(InputStream input, OutputStream output, Map<String,​OutputStream> outputStreamMap, Map<String,​InputStream> inputStreamMap, BiFunction<ObjectInput,​ObjectOutput,​ExecutionControl> factory) throws IOException
Creates an ExecutionControl for given packetized input and output. The given InputStream is de-packetized, and content forwarded to ObjectInput and given OutputStreams. The ObjectOutput and values read from the given InputStream are packetized and sent to the given OutputStream.

Parameters:
  `input` - the packetized input stream
  `output` - the packetized output stream
  `outputStreamMap` - a map between stream names and the output streams to forward. Names starting with '$' are reserved for internal use.
  `inputStreamMap` - a map between stream names and the input streams to forward. Names starting with '$' are reserved for internal use.
  `factory` - to create the ExecutionControl from ObjectInput and ObjectOutput.
Returns:
  the created ExecutionControl
Throws:
  `IOException` - if setting up the streams raised an exception

### detectJdiExitEvent

public static void detectJdiExitEvent​(VirtualMachine vm, Consumer<String> unbiddenExitHandler)
Monitor the JDI event stream for `VMDeathEvent` and `VMDisconnectEvent`. If encountered, invokes `unbiddenExitHandler`.

Parameters:
  `vm` - the virtual machine to check
  `unbiddenExitHandler` - the handler, which will accept the exit information