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

Module jdk.jshell
Package jdk.jshell.execution

# Class DirectExecutionControl

java.lang.Object
jdk.jshell.execution.DirectExecutionControl

All Implemented Interfaces:
  `AutoCloseable`, `ExecutionControl`

Direct Known Subclasses:
  `LocalExecutionControl`, `RemoteExecutionControl`

    public class DirectExecutionControl
    extends Object
    implements ExecutionControl

An `ExecutionControl` implementation that runs in the current process. May be used directly, or over a channel with `Util.forwardExecutionControl(ExecutionControl, java.io.ObjectInput, java.io.ObjectOutput)`.

Since:
  9

- ## Nested Class Summary

  ## Nested classes/interfaces declared in interface jdk.jshell.spi.ExecutionControl

  `ExecutionControl.ClassBytecodes, ExecutionControl.ClassInstallException, ExecutionControl.EngineTerminationException, ExecutionControl.ExecutionControlException, ExecutionControl.InternalException, ExecutionControl.NotImplementedException, ExecutionControl.ResolutionException, ExecutionControl.RunException, ExecutionControl.StoppedException, ExecutionControl.UserException`

- ## Constructor Summary

  Constructors
  Constructor | Description
  --- | ---
  `DirectExecutionControl()` | Create an instance using the default class loading.
  `DirectExecutionControl​(LoaderDelegate loaderDelegate)` | Creates an instance, delegating loader operations to the specified delegate.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `protected void` | `classesRedefined​(ExecutionControl.ClassBytecodes[] cbcs)` | Notify that classes have been redefined.
  `protected void` | `clientCodeEnter()` | Marks entry into user code.
  `protected void` | `clientCodeLeave()` | Marks departure from user code.
  `protected Class<?>` | `findClass​(String name)` | Finds the class with the specified binary name.
  `protected String` | `invoke​(Method doitMethod)` | Invoke the specified "doit-method", a static method with no parameters.
  `void` | `stop()` | Interrupts a running invoke.
  `protected String` | `throwConvertedInvocationException​(Throwable cause)` | Converts incoming exceptions in user code into instances of subtypes of `ExecutionControl.ExecutionControlException` and throws the converted exception.
  `protected String` | `throwConvertedOtherException​(Throwable ex)` | Converts incoming exceptions in agent code into instances of subtypes of `ExecutionControl.ExecutionControlException` and throws the converted exception.
  `protected static String` | `valueString​(Object value)` | Converts the `Object` value from `ExecutionControl.invoke(String, String)` or `ExecutionControl.varValue(String, String)` to `String`.

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

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

  ### Methods declared in interface jdk.jshell.spi.ExecutionControl

  `addToClasspath, close, extensionCommand, invoke, load, redefine, varValue`

- ## Constructor Details

  - ### DirectExecutionControl

    public DirectExecutionControl​(LoaderDelegate loaderDelegate)
    Creates an instance, delegating loader operations to the specified delegate.
    Parameters:
      `loaderDelegate` - the delegate to handle loading classes

  - ### DirectExecutionControl

    public DirectExecutionControl()
    Create an instance using the default class loading.

- ## Method Details

  - ### classesRedefined

    protected void classesRedefined​(ExecutionControl.ClassBytecodes[] cbcs) throws ExecutionControl.NotImplementedException, ExecutionControl.EngineTerminationException
    Notify that classes have been redefined.
    Parameters:
      `cbcs` - the class name and bytecodes to redefine
    Throws:
      `ExecutionControl.NotImplementedException` - if not implemented
      `ExecutionControl.EngineTerminationException` - the execution engine has terminated

  - ### stop

    public void stop() throws ExecutionControl.EngineTerminationException, ExecutionControl.InternalException
    Interrupts a running invoke.

    Not supported.

    Specified by:
      `stop` in interface `ExecutionControl`
    Throws:
      `ExecutionControl.EngineTerminationException` - the execution engine has terminated
      `ExecutionControl.InternalException` - an internal problem occurred

  - ### findClass

    protected Class<?> findClass​(String name) throws ClassNotFoundException
    Finds the class with the specified binary name.
    Parameters:
      `name` - the binary name of the class
    Returns:
      the Class Object
    Throws:
      `ClassNotFoundException` - if the class could not be found

  - ### invoke

    protected String invoke​(Method doitMethod) throws Exception
    Invoke the specified "doit-method", a static method with no parameters. The `ExecutionControl.invoke(java.lang.String, java.lang.String)` in this class will call this to invoke.
    Parameters:
      `doitMethod` - the Method to invoke
    Returns:
      the value or null
    Throws:
      `Exception` - any exceptions thrown by `Method.invoke(Object, Object...)` or any `ExecutionControl.ExecutionControlException` to pass-through.

  - ### valueString

    protected static String valueString​(Object value)
    Converts the `Object` value from `ExecutionControl.invoke(String, String)` or `ExecutionControl.varValue(String, String)` to `String`.
    Parameters:
      `value` - the value to convert
    Returns:
      the `String` representation

  - ### throwConvertedInvocationException

    protected String throwConvertedInvocationException​(Throwable cause) throws ExecutionControl.RunException, ExecutionControl.InternalException
    Converts incoming exceptions in user code into instances of subtypes of `ExecutionControl.ExecutionControlException` and throws the converted exception.
    Parameters:
      `cause` - the exception to convert
    Returns:
      never returns as it always throws
    Throws:
      `ExecutionControl.RunException` - for normal exception occurrences
      `ExecutionControl.InternalException` - for internal problems

  - ### throwConvertedOtherException

    protected String throwConvertedOtherException​(Throwable ex) throws ExecutionControl.RunException, ExecutionControl.InternalException
    Converts incoming exceptions in agent code into instances of subtypes of `ExecutionControl.ExecutionControlException` and throws the converted exception.
    Parameters:
      `ex` - the exception to convert
    Returns:
      never returns as it always throws
    Throws:
      `ExecutionControl.RunException` - for normal exception occurrences
      `ExecutionControl.InternalException` - for internal problems

  - ### clientCodeEnter

    protected void clientCodeEnter() throws ExecutionControl.InternalException
    Marks entry into user code.
    Throws:
      `ExecutionControl.InternalException` - in unexpected failure cases

  - ### clientCodeLeave

    protected void clientCodeLeave() throws ExecutionControl.InternalException
    Marks departure from user code.
    Throws:
      `ExecutionControl.InternalException` - in unexpected failure cases