in src/main/java/com/jetbrains/jdi/ThreadReferenceImpl.java [763:808]
public void forceEarlyReturn(Value returnValue) throws InvalidTypeException,
ClassNotLoadedException,
IncompatibleThreadStateException {
if (!vm.canForceEarlyReturn()) {
throw new UnsupportedOperationException(
"target does not support the forcing of a method to return early");
}
validateMirrorOrNull(returnValue);
StackFrameImpl sf;
try {
sf = (StackFrameImpl)frame(0);
} catch (IndexOutOfBoundsException exc) {
throw new InvalidStackFrameException("No more frames on the stack");
}
sf.validateStackFrame();
MethodImpl meth = (MethodImpl)sf.location().method();
ValueImpl convertedValue = prepareForAssignment(returnValue,
meth.getReturnValueContainer());
try {
JDWP.ThreadReference.ForceEarlyReturn.process(vm, this, convertedValue);
} catch (JDWPException exc) {
switch (exc.errorCode()) {
case JDWP.Error.OPAQUE_FRAME:
if (isVirtual() && !meth.isNative()) {
throw new InvalidStackFrameException("Opaque frame");
// throw new OpaqueFrameException();
} else {
throw new NativeMethodException();
}
case JDWP.Error.THREAD_NOT_SUSPENDED:
throw new IncompatibleThreadStateException(
"Thread not suspended");
case JDWP.Error.THREAD_NOT_ALIVE:
throw new IncompatibleThreadStateException(
"Thread has not started or has finished");
case JDWP.Error.NO_MORE_FRAMES:
throw new InvalidStackFrameException(
"No more frames on the stack");
default:
throw exc.toJDIException();
}
}
}