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

    All Methods Static Methods Instance Methods Concrete Methods
    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 Detail

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

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