View | Details | Raw Unified | Return to bug 396396 | Differences between
and this patch

Collapse All | Expand All

(-)a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFChildrenExpressions.java (-2 / +106 lines)
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);
(-)a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java (-1 / +28 lines)
Lines 81-87 Link Here
81
    private String remote_expression_id;
81
    private String remote_expression_id;
82
82
83
    private static int expr_cnt;
83
    private static int expr_cnt;
84
84
    
85
    public TCFNodeExpression(TCFNode parent) {
86
        super(parent,"Expr" + expr_cnt++);
87
        /*
88
         * To satisfy initialization these fields need to be set. Since this
89
         * is a duplicate variable reference they will not actually be used.
90
         */
91
        script          = null;
92
        index           = 0;
93
        deref           = false;
94
        field_id        = null;
95
        reg_id          = null;
96
        base_text       = null;
97
        var_expression  = null;
98
        rem_expression  = null;
99
        value           = null;
100
        type            = null;
101
        type_name       = null;
102
        string          = null;
103
        expression_text = null;
104
        children        = null;
105
        is_empty        = false;
106
    }
107
    
85
    TCFNodeExpression(final TCFNode parent, final String script,
108
    TCFNodeExpression(final TCFNode parent, final String script,
86
            final String field_id, final String var_id, final String reg_id,
109
            final String field_id, final String var_id, final String reg_id,
87
            final int index, final boolean deref) {
110
            final int index, final boolean deref) {
Lines 752-757 Link Here
752
        this.sort_pos = sort_pos;
775
        this.sort_pos = sort_pos;
753
    }
776
    }
754
777
778
    public int getSortPosition() {
779
        return sort_pos;
780
    }
781
    
755
    void setEnabled(boolean enabled) {
782
    void setEnabled(boolean enabled) {
756
        if (this.enabled == enabled) return;
783
        if (this.enabled == enabled) return;
757
        this.enabled = enabled;
784
        this.enabled = enabled;

Return to bug 396396