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