Lines 10-19
Link Here
|
10 |
*******************************************************************************/ |
10 |
*******************************************************************************/ |
11 |
package org.eclipse.tcf.internal.debug.ui.model; |
11 |
package org.eclipse.tcf.internal.debug.ui.model; |
12 |
|
12 |
|
|
|
13 |
import java.util.ArrayList; |
13 |
import java.util.HashMap; |
14 |
import java.util.HashMap; |
14 |
|
15 |
|
15 |
import org.eclipse.debug.core.model.IExpression; |
16 |
import org.eclipse.debug.core.model.IExpression; |
16 |
import org.eclipse.debug.core.model.IWatchExpression; |
17 |
import org.eclipse.debug.core.model.IWatchExpression; |
|
|
18 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; |
19 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; |
20 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; |
21 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; |
22 |
import org.eclipse.tcf.services.IExpressions; |
23 |
import org.eclipse.tcf.services.ISymbols; |
24 |
import org.eclipse.tcf.util.TCFDataCache; |
17 |
|
25 |
|
18 |
public class TCFChildrenExpressions extends TCFChildren { |
26 |
public class TCFChildrenExpressions extends TCFChildren { |
19 |
|
27 |
|
Lines 40-46
Link Here
|
40 |
private TCFNodeExpression findScript(String text) { |
48 |
private TCFNodeExpression findScript(String text) { |
41 |
for (TCFNode n : getNodes()) { |
49 |
for (TCFNode n : getNodes()) { |
42 |
TCFNodeExpression e = (TCFNodeExpression)n; |
50 |
TCFNodeExpression e = (TCFNodeExpression)n; |
43 |
if (text.equals(e.getScript())) return e; |
51 |
if (text.equals(e.getScript()) && ! e.isDeref()) return e; |
44 |
} |
52 |
} |
45 |
return null; |
53 |
return null; |
46 |
} |
54 |
} |
Lines 53-58
Link Here
|
53 |
return null; |
61 |
return null; |
54 |
} |
62 |
} |
55 |
|
63 |
|
|
|
64 |
private TCFNodeExpression findNonActiveDuplicate( String text, HashMap<String,TCFNode> currentDataSet ) { |
65 |
for ( TCFNodeExpression e : active_dups ) { |
66 |
boolean inuse = false; |
67 |
if (text.equals(e.getScript())) { |
68 |
for ( TCFNode ee : currentDataSet.values() ) { |
69 |
if ( ee == e ) { |
70 |
inuse = true; |
71 |
break; |
72 |
} |
73 |
} |
74 |
if ( ! inuse ) { |
75 |
return e; |
76 |
} |
77 |
} |
78 |
} |
79 |
return null; |
80 |
} |
81 |
|
82 |
private class TCFDuplicateNodeExpression extends TCFNodeExpression { |
83 |
|
84 |
private int sort_pos; |
85 |
private TCFNodeExpression ref_expr = null; |
86 |
|
87 |
public TCFDuplicateNodeExpression(TCFNode parent, TCFNodeExpression expr) { |
88 |
super(parent); |
89 |
|
90 |
/* |
91 |
* This is the actual expression to be used. |
92 |
*/ |
93 |
ref_expr = expr; |
94 |
} |
95 |
|
96 |
public void dispose() { ref_expr.dispose(); } |
97 |
void onSuspended(boolean func_call) { ref_expr.onSuspended(func_call); } |
98 |
void onRegisterValueChanged() { ref_expr.onRegisterValueChanged(); } |
99 |
void onMemoryChanged() { ref_expr.onMemoryChanged(); } |
100 |
void onMemoryMapChanged() { ref_expr.onMemoryMapChanged(); } |
101 |
void onValueChanged() { ref_expr.onValueChanged(); } |
102 |
public void onCastToTypeChanged() { ref_expr.onCastToTypeChanged(); } |
103 |
public boolean isEmpty() { return ref_expr.isEmpty(); } |
104 |
public String getScript() { return ref_expr.getScript(); } |
105 |
String getFieldID() { return ref_expr.getFieldID(); } |
106 |
String getRegisterID() { return ref_expr.getRegisterID(); } |
107 |
int getIndex() { return ref_expr.getIndex(); } |
108 |
boolean isDeref() { return ref_expr.isDeref(); } |
109 |
void setEnabled(boolean enabled) { ref_expr.setEnabled(enabled); } |
110 |
public TCFDataCache<IExpressions.Expression> getVariable() { return ref_expr.getVariable(); } |
111 |
public TCFDataCache<IExpressions.Expression> getExpression() { return ref_expr.getExpression(); } |
112 |
public TCFDataCache<IExpressions.Value> getValue() { return ref_expr.getValue(); } |
113 |
public TCFDataCache<ISymbols.Symbol> getType() { return ref_expr.getType(); } |
114 |
public TCFDataCache<String> getExpressionText() { return ref_expr.getExpressionText(); } |
115 |
protected boolean getData(ILabelUpdate result, Runnable done) { return ref_expr.getData(result, done); } |
116 |
protected void getFontData(ILabelUpdate update, String view_id) { ref_expr.getFontData(update, view_id); } |
117 |
public boolean getDetailText(StyledStringBuffer bf, Runnable done) { return ref_expr.getDetailText(bf, done); } |
118 |
public String getValueText(boolean add_error_text, Runnable done) { return ref_expr.getValueText(add_error_text, done); } |
119 |
protected boolean getData(IChildrenCountUpdate result, Runnable done) { return ref_expr.getData(result, done); } |
120 |
protected boolean getData(IChildrenUpdate result, Runnable done) { return ref_expr.getData(result, done); } |
121 |
protected boolean getData(IHasChildrenUpdate result, Runnable done) { return ref_expr.getData(result, done); } |
122 |
|
123 |
void setSortPosition(int sort_pos) { |
124 |
this.sort_pos = sort_pos; |
125 |
} |
126 |
|
127 |
public int getSortPosition() { |
128 |
return sort_pos; |
129 |
} |
130 |
|
131 |
public int compareTo(TCFNode n) { |
132 |
TCFNodeExpression e = (TCFNodeExpression)n; |
133 |
if (sort_pos < e.getSortPosition()) return -1; |
134 |
if (sort_pos > e.getSortPosition()) return +1; |
135 |
return 0; |
136 |
} |
137 |
|
138 |
@SuppressWarnings("rawtypes") |
139 |
public Object getAdapter(Class adapter) { |
140 |
return ref_expr.getAdapter(adapter); |
141 |
} |
142 |
} |
143 |
|
144 |
private ArrayList<TCFNodeExpression> active_dups = new ArrayList<TCFNodeExpression>(); |
145 |
|
56 |
@Override |
146 |
@Override |
57 |
protected boolean startDataRetrieval() { |
147 |
protected boolean startDataRetrieval() { |
58 |
int cnt = 0; |
148 |
int cnt = 0; |
Lines 60-66
Link Here
|
60 |
for (final IExpression e : node.model.getExpressionManager().getExpressions()) { |
150 |
for (final IExpression e : node.model.getExpressionManager().getExpressions()) { |
61 |
String text = e.getExpressionText(); |
151 |
String text = e.getExpressionText(); |
62 |
TCFNodeExpression n = findScript(text); |
152 |
TCFNodeExpression n = findScript(text); |
63 |
if (n == null) add(n = new TCFNodeExpression(node, text, null, null, null, -1, false)); |
153 |
if (n == null) { |
|
|
154 |
add(n = new TCFNodeExpression(node, text, null, null, null, -1, false)); |
155 |
} |
156 |
else { |
157 |
if ( data.containsKey(n.id) ) { |
158 |
TCFNodeExpression dup_node = findNonActiveDuplicate(text,data); |
159 |
if ( dup_node == null ) { |
160 |
n = new TCFDuplicateNodeExpression(node,n); |
161 |
active_dups.add(n); |
162 |
} |
163 |
else { |
164 |
n = dup_node; |
165 |
} |
166 |
} |
167 |
} |
64 |
n.setSortPosition(cnt++); |
168 |
n.setSortPosition(cnt++); |
65 |
if (e instanceof IWatchExpression) n.setEnabled(((IWatchExpression)e).isEnabled()); |
169 |
if (e instanceof IWatchExpression) n.setEnabled(((IWatchExpression)e).isEnabled()); |
66 |
data.put(n.id, n); |
170 |
data.put(n.id, n); |