/******************************************************************************* * Copyright (c) 2000, 2011 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.jdt.debug.eval; import org.eclipse.debug.core.DebugException; import org.eclipse.jdt.debug.core.IJavaObject; import org.eclipse.jdt.debug.core.IJavaReferenceType; import org.eclipse.jdt.debug.core.IJavaStackFrame; import org.eclipse.jdt.debug.core.IJavaThread; /** * An evaluation engine that performs evaluations by interpreting abstract * syntax trees. An AST evaluation engine is capable of creating compiled * expressions that can be evaluated multiple times in a given runtime context. * * @since 2.0 * @noimplement This interface is not intended to be implemented by clients. * @noextend This interface is not intended to be extended by clients. */ public interface IAstEvaluationEngine extends IEvaluationEngine { /** * Asynchronously evaluates the given expression in the context of the * specified stack frame, reporting the result back to the given listener. * The thread is resumed from the location at which it is currently * suspended to perform the evaluation. When the evaluation completes, the * thread will be suspended at this original location. The thread runs the * evaluation with the given evaluation detail (@see * IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int)). * Compilation and runtime errors are reported in the evaluation result. * * @param expression * expression to evaluate * @param frame * the stack frame context in which to run the evaluation. * @param listener * the listener that will receive notification when/if the * evaluation completes * @param evaluationDetail * one of <code>DebugEvent.EVALUATION</code> or * <code>DebugEvent.EVALUATION_IMPLICIT</code> * @param hitBreakpoints * whether or not breakpoints should be honored in the evaluation * thread during the evaluation. If <code>false</code>, * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException * if this method fails. Reasons include: * <ul> * <li>Failure communicating with the VM. The * DebugException's status code contains the underlying * exception responsible for the failure.</li> * <li>The associated thread is not currently suspended</li> * <li>The stack frame is not contained in the debug target * associated with this evaluation engine</li> * <li>The associated thread is suspended in the middle of an * evaluation that has not completed. It is not possible to * perform nested evaluations</li> * </ul> */ public void evaluateExpression(ICompiledExpression expression, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException; /** * Asynchronously evaluates the given expression in the context of the * specified type, reporting the result back to the given listener. The * expression is evaluated in the context of the Java project this * evaluation engine was created on. If the expression is determined to have * no errors, the expression is evaluated in the thread associated with the * given stack frame. When the evaluation completes, the thread will be * suspended at this original location. The thread runs the evaluation with * the given evaluation detail (@see * IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int)). * Compilation and runtime errors are reported in the evaluation result. * * @param expression * the expression to evaluate * @param object * the 'this' context for the evaluation * @param thread * the thread in which to run the evaluation, which must be * suspended * @param listener * the listener that will receive notification when/if the * evaluation completes * @param evaluationDetail * one of <code>DebugEvent.EVALUATION</code> or * <code>DebugEvent.EVALUATION_IMPLICIT</code> * @param hitBreakpoints * whether or not breakpoints should be honored in the evaluation * thread during the evaluation. If <code>false</code>, * breakpoints hit in the evaluation thread will be ignored. * @exception DebugException * if this method fails. Reasons include: * <ul> * <li>Failure communicating with the VM. The * DebugException's status code contains the underlying * exception responsible for the failure.</li> * <li>The associated thread is not currently suspended</li> * <li>The stack frame is not contained in the debug target * associated with this evaluation engine</li> * <li>The associated thread is suspended in the middle of an * evaluation that has not completed. It is not possible to * perform nested evaluations</li> * </ul> */ public void evaluateExpression(ICompiledExpression expression, IJavaObject object, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException; /** * Synchronously generates a compiled expression from the given expression * in the context of the specified stack frame. The generated expression can * be stored and evaluated later in a valid runtime context. Compilation * errors are reported in the returned compiled expression. * * @param expression * expression to compile * @param frame * the context in which to compile the expression * @return the compiled expression * @exception DebugException * if this method fails. Reasons include: * <ul> * <li>Failure communicating with the VM. The * DebugException's status code contains the underlying * exception responsible for the failure.</li> * <li>The associated thread is not currently suspended</li> * <li>The stack frame is not contained in the debug target * associated with this evaluation engine</li> * </ul> */ public ICompiledExpression getCompiledExpression(String expression, IJavaStackFrame frame) throws DebugException; /** * Synchronously generates a compiled expression from the given expression * in the context of the specified object. The generated expression can be * stored and evaluated later in a valid runtime context. Compilation errors * are reported in the returned compiled expression. * * @param expression * expression to compile * @param object * the context in which to compile the expression * @return the compiled epxression * @exception DebugException * if this method fails. Reasons include: * <ul> * <li>Failure communicating with the VM. The * DebugException's status code contains the underlying * exception responsible for the failure.</li> * <li>The associated thread is not currently suspended</li> * <li>The stack frame is not contained in the debug target * associated with this evaluation engine</li> * </ul> */ public ICompiledExpression getCompiledExpression(String expression, IJavaObject object) throws DebugException; /** * Synchronously generates a compiled expression from the given expression * in the context of the specified type. The generated expression can be * stored and evaluated later in a valid runtime context. Compilation errors * are reported in the returned compiled expression. * * @param expression * expression to compile * @param type * the context in which to compile the expression * @return the compiled expression * @exception DebugException * if this method fails. Reasons include: * <ul> * <li>Failure communicating with the VM. The * DebugException's status code contains the underlying * exception responsible for the failure.</li> * <li>The associated thread is not currently suspended</li> * <li>The stack frame is not contained in the debug target * associated with this evaluation engine</li> * </ul> * @since 3.1 */ public ICompiledExpression getCompiledExpression(String expression, IJavaReferenceType type) throws DebugException; }