- 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 ofExecutionControl
.- 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 JDIReferenceType
corresponding to the specified class name.protected abstract VirtualMachine
vm()
Returns the JDIVirtualMachine
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 agentin
- the input to the remote agent
-
-
Method Detail
-
vm
protected abstract VirtualMachine vm() throws ExecutionControl.EngineTerminationException
Returns the JDIVirtualMachine
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 JDIVirtualMachine.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 interfaceExecutionControl
- Overrides:
redefine
in classStreamingExecutionControl
- Parameters:
cbcs
- the class name and bytecodes to redefine- Throws:
ExecutionControl.ClassInstallException
- exception occurred redefining the classes, some or all were not redefinedExecutionControl.EngineTerminationException
- the execution engine has terminated
-
referenceType
protected ReferenceType referenceType(VirtualMachine vm, String name)
Returns the JDIReferenceType
corresponding to the specified class name.- Parameters:
vm
- the current JDIVirtualMachine
as returned byvm()
name
- the class name to look-up- Returns:
- the corresponding
ReferenceType
-
-