Util (Java SE 26 & JDK 26)
Description: declaration: module: jdk.jshell, package: jdk.jshell.execution, class: Util
Keywords: jdk.jshell.execution.Util class

# 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 Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## 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