/*******************************************************************************
 * 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.debug.core.model;

/**
 * A watch expression is an expression that is evaluated in the context
 * of a specific stack frame, thread, debug target, process, or launch.
 * Generally, a watch expression is a snippet of code that is evaluated
 * each time a debug target suspends, or when a user provides a context
 * for an evaluation by selecting a debug target or thread. An expression
 * updates its value when it is provided with a context in which it
 * can perform an evaluation. 
 * <p>
 * Clients are not intended to implement this interface. An implementation
 * is provided by the debug platform. Clients that support watch expressions
 * should contribute and implement a watch exrepssion delegate. Watch
 * expressions can be created via the <code>IExpressionManager</code>.
 * </p>
 * @see org.eclipse.debug.core.model.IWatchExpressionDelegate
 * @see org.eclipse.debug.core.IExpressionManager
 * @since 3.0
 */
public interface IWatchExpression extends IErrorReportingExpression {
	
	/**
	 * Updates this watch expression's value based on the current evaluation
	 * context. This watch expression fires a debug change event when the
	 * evaluation is complete. A watch expression can be asked to
	 * evaluate even when it is disabled. Note that implementations should
	 * generally be asynchronous to avoid blocking the calling thread. 
	 */
	public void evaluate();
	/**
	 * Sets the context for this watch expression, or <code>null</code> if none.
	 * If the given context is valid for this expression, this expression may
	 * update its value. When the value update is complete, a debug change event is
	 * fired. When <code>null</code> is specified as a context, this expression
	 * may choose to retain its previous value.
	 * <p>
	 * The context is usually one of (but not limited to):
	 * <ul>
	 * <li>a debug target (<code>IDebugTarget</code>)</li>
	 * <li>a thread (<code>IThread</code>)</li>
	 * <li>a stack frame (<code>IStackFrame</code>)</li>
	 * </ul>
	 * </p>
	 *  
	 * @param context context in which to update this expression's value, or
	 * 	<code>null</code> if none
	 */
	public void setExpressionContext(IDebugElement context);
	/**
	 * Sets this watch expression's snippet of code. This method
	 * causes the new snippet to be evaluated immediately in
	 * the expression's last context.
	 * 
	 * @param expressionText the snippet which will be evaluated
	 */
	public void setExpressionText(String expressionText);
	/**
	 * Returns whether the result of this watch expression is pending.
	 * An expression is pending if an evaluation has been requested, but
	 * the value has not yet been returned.
	 * 
	 * @return whether this expression's result is pending
	 */
	public boolean isPending();
	/**
	 * Returns whether this expression is enabled. An enabled expression will
	 * update its value. A disabled expression will not.
	 * 
	 * @return whether this expression is enabled
	 */
	public boolean isEnabled();
	/**
	 * Sets this expression's enabled state. This method
	 * causes the new snippet to be evaluated immediately in
	 * the expression's last context.
	 * 
	 * @param enabled whether this expression should be enabled
	 */
	public void setEnabled(boolean enabled);

}
