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