Module jdk.jshell
Package jdk.jshell.execution

## Class JdiExecutionControl

- java.lang.Object
- - jdk.jshell.execution.StreamingExecutionControl
  - - jdk.jshell.execution.JdiExecutionControl

- All Implemented Interfaces:
    `AutoCloseable`, `ExecutionControl`
  Direct Known Subclasses:
    `JdiDefaultExecutionControl`

      public abstract class JdiExecutionControl
      extends StreamingExecutionControl
      implements ExecutionControl

  Abstract JDI implementation of `ExecutionControl`.
  Since:
    9

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from 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
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `JdiExecutionControl​(ObjectOutput out, ObjectInput in)` | Create an instance.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `redefine​(ExecutionControl.ClassBytecodes[] cbcs)` | Redefine the specified classes.
    `protected ReferenceType` | `referenceType​(VirtualMachine vm, String name)` | Returns the JDI `ReferenceType` corresponding to the specified class name.
    `protected abstract VirtualMachine` | `vm​()` | Returns the JDI `VirtualMachine` instance.

    - ### Methods inherited from interface jdk.jshell.spi.ExecutionControl

      `addToClasspath, close, extensionCommand, generate, generate, invoke, load, stop, varValue`

    - ### Methods inherited from class java.lang.Object

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

    - ### Methods inherited from class jdk.jshell.execution.StreamingExecutionControl

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

- - ### Constructor Detail

    - #### JdiExecutionControl

          protected JdiExecutionControl​(ObjectOutput out,
                                        ObjectInput in)

      Create an instance.
      Parameters:
        `out` - the output from the remote agent
        `in` - the input to the remote agent

  - ### Method Detail

    - #### vm

          protected abstract VirtualMachine vm​()
                                        throws ExecutionControl.EngineTerminationException

      Returns the JDI `VirtualMachine` instance.
      Returns:
        the virtual machine
      Throws:
        `ExecutionControl.EngineTerminationException` - if the VM is dead/disconnected

    - #### redefine

          public void redefine​(ExecutionControl.ClassBytecodes[] cbcs)
                        throws ExecutionControl.ClassInstallException,
                               ExecutionControl.EngineTerminationException

      Redefine the specified classes. Where 'redefine' is, as in JDI and JVMTI, an in-place replacement of the classes (preserving class identity) -- that is, existing references to the class do not need to be recompiled. This implementation uses JDI `VirtualMachine.redefineClasses(java.util.Map)`. It will be unsuccessful if the signature of the class has changed (see the JDI spec). The JShell-core is designed to adapt to unsuccessful redefine.
      Specified by:
        `redefine` in interface `ExecutionControl`
      Overrides:
        `redefine` in class `StreamingExecutionControl`
      Parameters:
        `cbcs` - the class name and bytecodes to redefine
      Throws:
        `ExecutionControl.ClassInstallException` - exception occurred redefining the classes, some or all were not redefined
        `ExecutionControl.EngineTerminationException` - the execution engine has terminated

    - #### referenceType

          protected ReferenceType referenceType​(VirtualMachine vm,
                                                String name)

      Returns the JDI `ReferenceType` corresponding to the specified class name.
      Parameters:
        `vm` - the current JDI `VirtualMachine` as returned by `vm()`
        `name` - the class name to look-up
      Returns:
        the corresponding `ReferenceType`