Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/services/IExpressions.java')
-rw-r--r--plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/services/IExpressions.java347
1 files changed, 347 insertions, 0 deletions
diff --git a/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/services/IExpressions.java b/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/services/IExpressions.java
new file mode 100644
index 000000000..6b7d35d21
--- /dev/null
+++ b/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/services/IExpressions.java
@@ -0,0 +1,347 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 Wind River Systems, Inc. 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.tcf.services;
+
+import java.util.Map;
+
+import org.eclipse.tm.tcf.protocol.IService;
+import org.eclipse.tm.tcf.protocol.IToken;
+
+/**
+ * Expressions service allows TCF client to perform expression evaluation on remote target.
+ * The service can be used to retrieve or modify values of variables or any data structures in remote target memory.
+ */
+public interface IExpressions extends IService {
+
+ /**
+ * Service name.
+ */
+ static final String NAME = "Expressions";
+
+ /**
+ * Expression object represent an expression that can be evaluated by remote target.
+ * It has a unique ID and contains all information necessary to compute a value.
+ * The object data usually includes:
+ * 1. process, thread or stack frame ID that should be used to resolve symbol names;
+ * 2. a script that can compute a value, like "x.y + z"
+ */
+ interface Expression {
+ /**
+ * Get context ID.
+ * @return context ID.
+ */
+ String getID();
+
+ /**
+ * Get parent context ID.
+ * @return parent context ID.
+ */
+ String getParentID();
+
+ /**
+ * Get expression script language ID.
+ * @return language ID.
+ */
+ String getLanguage();
+
+ /**
+ * Return expression string - the script part of the context.
+ * @return expression script string
+ */
+ String getExpression();
+
+ /**
+ * Return symbol ID if the expression represents a symbol (e.g. local variable).
+ * @return symbol ID
+ */
+ String getSymbolID();
+
+ /**
+ * Get size of expression value in bits.
+ * Can be 0 if value size is even number of bytes, use getSize() in such case.
+ * @return size in bits.
+ */
+ int getBits();
+
+ /**
+ * Get size in bytes. The size can include extra (unused) bits.
+ * This is "static" or "declared" size - as determined by expression type.
+ * @return size in bytes.
+ */
+ int getSize();
+
+ /**
+ * Get expression type ID. Symbols service can be used to get type properties.
+ * This is "static" or "declared" type ID, actual type of a value can be different -
+ * if expression language supports dynamic typing.
+ * @return type ID.
+ */
+ String getTypeID();
+
+ /**
+ * Check if the expression can be assigned a new value.
+ * @return true if can assign.
+ */
+ boolean canAssign();
+
+ /**
+ * Get complete map of context properties.
+ * @return map of context properties.
+ */
+ Map<String,Object> getProperties();
+ }
+
+ /**
+ * Expression context property names.
+ */
+ static final String
+ PROP_ID = "ID",
+ PROP_PARENT_ID = "ParentID",
+ PROP_SYMBOL_ID = "SymbolID",
+ PROP_LANGUAGE = "Language",
+ PROP_EXPRESSION = "Expression",
+ PROP_BITS = "Bits",
+ PROP_SIZE = "Size",
+ PROP_TYPE = "Type",
+ PROP_CAN_ASSIGN = "CanAssign";
+
+ /**
+ * Value represents result of expression evaluation.
+ * Note that same expression can be evaluated multiple times with different results.
+ */
+ interface Value {
+
+ /**
+ * Get value type class.
+ * @see ISymbols.TypeClass
+ * @return
+ */
+ ISymbols.TypeClass getTypeClass();
+
+ /**
+ * Get value type ID. Symbols service can be used to get type properties.
+ * @return type ID.
+ */
+ String getTypeID();
+
+ /**
+ * Check endianness of the values.
+ * Big-endian means decreasing numeric significance with increasing byte number.
+ * @return true if big-endian.
+ */
+ boolean isBigEndian();
+
+ /**
+ * Return register ID if the value represents register variable.
+ * @return register ID or null.
+ */
+ String getRegisterID();
+
+ /**
+ * Return value memory address, if applicable.
+ * @return address or null.
+ */
+ Number getAddress();
+
+ /**
+ * Get value as array of bytes.
+ * @return value as array of bytes.
+ */
+ byte[] getValue();
+
+ /**
+ * Get complete map of value properties.
+ * @return map of value properties.
+ */
+ Map<String,Object> getProperties();
+ }
+
+ /**
+ * Expression value property names.
+ */
+ static final String
+ VAL_CLASS = "Class",
+ VAL_TYPE = "Type",
+ VAL_BIG_ENDIAN = "BigEndian",
+ VAL_REGISTER = "Register",
+ VAL_ADDRESS = "Address";
+
+ /**
+ * Retrieve expression context info for given context ID.
+ * @see Expression
+ *
+ * @param id – context ID.
+ * @param done - call back interface called when operation is completed.
+ * @return - pending command handle.
+ */
+ IToken getContext(String id, DoneGetContext done);
+
+ /**
+ * Client call back interface for getContext().
+ */
+ interface DoneGetContext {
+ /**
+ * Called when context data retrieval is done.
+ * @param token - command handle
+ * @param error – error description if operation failed, null if succeeded.
+ * @param context – context properties.
+ */
+ void doneGetContext(IToken token, Exception error, Expression context);
+ }
+
+ /**
+ * Retrieve children IDs for given parent ID.
+ * Meaning of the operation depends on parent kind:
+ * 1. expression with type of a struct, union, or class - fields;
+ * 2. expression with type of an enumeration - enumerators;
+ * 3. expression with type of an array - array elements;
+ * 4. stack frame - function arguments and local variables;
+ * 5. thread - top stack frame function arguments and local variables;
+ * 6. process - global variables;
+ *
+ * Children list does *not* include IDs of expressions that were created by clients
+ * using "create" command.
+ *
+ * @param parent_context_id – parent context ID.
+ * @param done - call back interface called when operation is completed.
+ * @return - pending command handle.
+ */
+ IToken getChildren(String parent_context_id, DoneGetChildren done);
+
+ /**
+ * Client call back interface for getChildren().
+ */
+ interface DoneGetChildren {
+ /**
+ * Called when context list retrieval is done.
+ * @param token - command handle
+ * @param error – error description if operation failed, null if succeeded.
+ * @param context_ids – array of available context IDs.
+ */
+ void doneGetChildren(IToken token, Exception error, String[] context_ids);
+ }
+
+ /**
+ * Create an expression context.
+ * The context should be disposed after use.
+ * @param parent_id - a context ID that can be used to resolve symbol names.
+ * @param language - language of expression script, null means default language
+ * @param expression - expression script
+ * @param done - call back interface called when operation is completed.
+ * @return - pending command handle.
+ */
+ IToken create(String parent_id, String language, String expression, DoneCreate done);
+
+ /**
+ * Client call back interface for create().
+ */
+ interface DoneCreate {
+ /**
+ * Called when context create context command is done.
+ * @param token - command handle
+ * @param error – error description if operation failed, null if succeeded.
+ * @param context – context properties.
+ */
+ void doneCreate(IToken token, Exception error, Expression context);
+ }
+
+ /**
+ * Dispose an expression context that was created by create()
+ * @param id - the expression context ID
+ * @param done - call back interface called when operation is completed.
+ * @return - pending command handle.
+ */
+ IToken dispose(String id, DoneDispose done);
+
+ /**
+ * Client call back interface for dispose().
+ */
+ interface DoneDispose {
+ /**
+ * Called when context dispose command is done.
+ * @param token - command handle
+ * @param error – error description if operation failed, null if succeeded.
+ */
+ void doneDispose(IToken token, Exception error);
+ }
+
+ /**
+ * Evaluate value of an expression context.
+ * @param id - the expression context ID
+ * @param done - call back interface called when operation is completed.
+ * @return - pending command handle.
+ */
+ IToken evaluate(String id, DoneEvaluate done);
+
+ /**
+ * Client call back interface for evaluate().
+ */
+ interface DoneEvaluate {
+ /**
+ * Called when context dispose command is done.
+ * @param token - command handle
+ * @param error – error description if operation failed, null if succeeded.
+ * @param value - expression evaluation result
+ */
+ void doneEvaluate(IToken token, Exception error, Value value);
+ }
+
+ /**
+ * Assign a value to memory location determined by an expression.
+ * @param id - expression ID.
+ * @param value - value as an array of bytes.
+ * @param done - call back interface called when operation is completed.
+ * @return - pending command handle.
+ */
+ IToken assign(String id, byte[] value, DoneAssign done);
+
+ /**
+ * Client call back interface for assign().
+ */
+ interface DoneAssign {
+ /**
+ * Called when assign command is done.
+ * @param token - command handle
+ * @param error – error description if operation failed, null if succeeded.
+ */
+ void doneAssign(IToken token, Exception error);
+ }
+
+ /**
+ * Add expressions service event listener.
+ * @param listener - event listener implementation.
+ */
+ void addListener(ExpressionsListener listener);
+
+ /**
+ * Remove expressions service event listener.
+ * @param listener - event listener implementation.
+ */
+ void removeListener(ExpressionsListener listener);
+
+ /**
+ * Registers event listener is notified when registers context hierarchy
+ * changes, and when a register is modified by the service commands.
+ */
+ interface ExpressionsListener {
+
+ /**
+ * Called when expression value was changed and clients
+ * need to update themselves. Clients, at least, should invalidate
+ * corresponding cached expression data.
+ * Not every change is notified - it is not possible,
+ * only those, which are not caused by normal execution of the debuggee.
+ * At least, changes caused by "assign" command should be notified.
+ * @param id - expression context ID.
+ */
+ void valueChanged(String id);
+ }
+}

Back to the top