1
/*******************************************************************************
2
* Copyright (c) 2010 Ericsson and others.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Ericsson - Initial API and implementation
10
*******************************************************************************/
11
package org.eclipse.cdt.dsf.mi.service.command.output;
13
import java.util.ArrayList;
14
import java.util.List;
17
* -trace-list-variables
19
* ^done,trace-variables={nr_rows="1",nr_cols="3",
20
* hdr=[{width="15",alignment="-1",col_name="name",colhdr="Name"},
21
* {width="11",alignment="-1",col_name="initial",colhdr="Initial"},
22
* {width="11",alignment="-1",col_name="current",colhdr="Current"}],
23
* body=[variable={name="$trace_timestamp",initial="0"}
24
* variable={name="$foo",initial="10",current="15"}]}
28
public class MITraceListVariablesInfo extends MIInfo {
30
public class MITraceVariableInfo {
32
private String fInitialValue;
33
private String fCurrentValue;
35
public String getName() {
39
public String getCurrentValue() {
43
public String getInitialValue() {
48
private MITraceVariableInfo[] fVariables;
50
public MITraceListVariablesInfo(MIOutput out) {
55
public MITraceVariableInfo[] getTraceVariables() {
59
private void parse() {
60
List<MITraceVariableInfo> aList = new ArrayList<MITraceVariableInfo>(1);
62
MIOutput out = getMIOutput();
63
MIResultRecord rr = out.getMIResultRecord();
65
MIResult[] results = rr.getMIResults();
66
for (int i = 0; i < results.length; i++) {
67
String var = results[i].getVariable();
68
if (var.equals("trace-variables")) { //$NON-NLS-1$
69
parseTable(results[i].getMIValue(), aList);
74
fVariables = aList.toArray(new MITraceVariableInfo[aList.size()]);
77
private void parseTable(MIValue val, List<MITraceVariableInfo> aList) {
78
if (val instanceof MITuple) {
79
MIResult[] table = ((MITuple)val).getMIResults();
80
for (int i = 0; i < table.length; i++) {
81
String variable = table[i].getVariable();
82
if (variable.equals("body")) { //$NON-NLS-1$
83
parseBody(table[i].getMIValue(), aList);
89
private void parseBody(MIValue body, List<MITraceVariableInfo> aList) {
90
if (body instanceof MIList) {
91
MIResult[] vars = ((MIList)body).getMIResults();
92
for (int i = 0; i < vars.length; i++) {
93
String variable = vars[i].getVariable();
94
if (variable.equals("variable")) { //$NON-NLS-1$
95
parseVariable(vars[i].getMIValue(), aList);
101
private void parseVariable(MIValue variable, List<MITraceVariableInfo> aList) {
102
if (variable instanceof MITuple) {
103
MIResult[] results = ((MITuple)variable).getMIResults();
104
MITraceVariableInfo info = new MITraceVariableInfo();
105
for (int i = 0; i < results.length; i++) {
106
String var = results[i].getVariable();
107
MIValue value = results[i].getMIValue();
108
String str = ""; //$NON-NLS-1$
109
if (value != null && value instanceof MIConst) {
110
str = ((MIConst)value).getCString();
113
if (var.equals("name")) { //$NON-NLS-1$
115
} else if (var.equals("initial")) { //$NON-NLS-1$
116
info.fInitialValue = str;
117
} else if (var.equals("current")) { //$NON-NLS-1$
118
info.fCurrentValue = str;