/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdi.hcr;


import com.sun.jdi.Value;

/**
 * Hot code replacement extension to <code>com.sun.jdi.ThreadReference</code>.
 */
public interface ThreadReference {
	/**
	 * Resumes the execution of this thread as if the next instruction was a return 
	 * instruction with the given value. This causes the top stack frame to be popped with 
	 * the given value.
	 * <p>
	 * A breakpoint instruction at the current instruction is not triggered that is, this 
	 * operation takes precedence over breakpoints. <code>try-finally</code> blocks enclosing 
	 * the current location will be triggered in due course.
	 * <p>
	 * The triggerFinallyAndSynchronizedBlocks option on this operation controls whether 
	 * <code>try-finally</code> and <code>synchronized</code> blocks enclosing the current 
	 * location should be triggered:
	 * <ul>
	 *   <li>If no, the stack frame is popped, the return value is returned, and execution 
	 *       continues back in the caller. Note that <code>finally</code> blocks are not run,
	 *       and that if the code is nested within a <code>synchronized</code> statement, the 
	 *       monitor  lock is not released (however, if the method is </code>synchronized</code> 
	 *       the monitor lock will be properly released). This mechanism is sure-fire, but at 
	 *       the risk of not letting the target program clean itself up (e.g., close its files).
	 *   <li>If yes, the VM checks to see whether there might be a <code>finally</code> or
	 *       <code>synchronized</code> block enclosing the current instruction.
	 *       <ul>
	 *         <li>If there is no enclosing <code>finally</code> block, the operation reduces 
	 *             to the above case.
	 *         <li>If there is an enclosing <code>finally</code> block, the VM creates a VM 
	 *             exception and activates the <code>finally</code> block with it. If this 
	 *             exception eventually causes the stack frame to be popped, the exception is 
	 *             caught by the VM itself, the return value is returned, and execution continues 
	 *             back in the caller.
	 *       <ul>
	 * </ul>
	 * <p>
	 * Note that a <code>finally</code> block manifests itself as (and is indistinguishable 
	 * from) a <code>catch Throwable</code> block. <code>synchronized</code> statements 
	 * also compile to a <code> catch Throwable block<code>.The target program may inadventently 
	 * end up catching this exception. 
	 * 
	 * Since the choices each have their pros and cons, making the decision
	 * is left to the debugger. However the later option is the  recommended choice.
	 * <p>
	 * The reply to the operation contains a flag indicating whether any <code>finally</code> or
	 * <code>synchronized</code> blocks are enclosing the current instruction.
	 * <p>
	 * This operation is ignored if the thread was not suspended. If the thread was suspended multiple 
	 * times, wait for the same number of resumes before executing the return instruction.
	 * <p>
	 * The returned value is ignored if the method returns void.
	 * <p>
	 * Throws an <code>OperationRefusedException</code> if the VM refused to perform this operation.
	 * This in recognition that the VM may be in an awkward state and unable to comply: 
	 * <ul>
	 *   <li>for example, execution is suspended in a native method, 
	 *   <li>for example, execution is suspended during class preparation.
	 * </ul>
	 */
	public boolean doReturn(Value returnValue, boolean triggerFinallyAndSynchronizedBlocks);
}
