00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 package org.antlr.runtime.debug;
00029
00030 import org.antlr.runtime.Token;
00031 import org.antlr.runtime.TokenStream;
00032 import org.antlr.runtime.RecognitionException;
00033 import org.antlr.runtime.tree.TreeAdaptor;
00034
00047 public class DebugTreeAdaptor implements TreeAdaptor {
00048 protected DebugEventListener dbg;
00049 protected TreeAdaptor adaptor;
00050
00051 public DebugTreeAdaptor(DebugEventListener dbg, TreeAdaptor adaptor) {
00052 this.dbg = dbg;
00053 this.adaptor = adaptor;
00054 }
00055
00056 public Object create(Token payload) {
00057 if ( payload.getTokenIndex() < 0 ) {
00058
00059 return create(payload.getType(), payload.getText());
00060 }
00061 Object node = adaptor.create(payload);
00062 dbg.createNode(node, payload);
00063 return node;
00064 }
00065
00066 public Object errorNode(TokenStream input, Token start, Token stop,
00067 RecognitionException e)
00068 {
00069 Object node = adaptor.errorNode(input, start, stop, e);
00070 if ( node!=null ) {
00071 dbg.errorNode(node);
00072 }
00073 return node;
00074 }
00075
00076 public Object dupTree(Object tree) {
00077 Object t = adaptor.dupTree(tree);
00078
00079
00080
00081 simulateTreeConstruction(t);
00082 return t;
00083 }
00084
00086 protected void simulateTreeConstruction(Object t) {
00087 dbg.createNode(t);
00088 int n = adaptor.getChildCount(t);
00089 for (int i=0; i<n; i++) {
00090 Object child = adaptor.getChild(t, i);
00091 simulateTreeConstruction(child);
00092 dbg.addChild(t, child);
00093 }
00094 }
00095
00096 public Object dupNode(Object treeNode) {
00097 Object d = adaptor.dupNode(treeNode);
00098 dbg.createNode(d);
00099 return d;
00100 }
00101
00102 public Object nil() {
00103 Object node = adaptor.nil();
00104 dbg.nilNode(node);
00105 return node;
00106 }
00107
00108 public boolean isNil(Object tree) {
00109 return adaptor.isNil(tree);
00110 }
00111
00112 public void addChild(Object t, Object child) {
00113 if ( t==null || child==null ) {
00114 return;
00115 }
00116 adaptor.addChild(t,child);
00117 dbg.addChild(t, child);
00118 }
00119
00120 public Object becomeRoot(Object newRoot, Object oldRoot) {
00121 Object n = adaptor.becomeRoot(newRoot, oldRoot);
00122 dbg.becomeRoot(newRoot, oldRoot);
00123 return n;
00124 }
00125
00126 public Object rulePostProcessing(Object root) {
00127 return adaptor.rulePostProcessing(root);
00128 }
00129
00130 public void addChild(Object t, Token child) {
00131 Object n = this.create(child);
00132 this.addChild(t, n);
00133 }
00134
00135 public Object becomeRoot(Token newRoot, Object oldRoot) {
00136 Object n = this.create(newRoot);
00137 adaptor.becomeRoot(n, oldRoot);
00138 dbg.becomeRoot(newRoot, oldRoot);
00139 return n;
00140 }
00141
00142 public Object create(int tokenType, Token fromToken) {
00143 Object node = adaptor.create(tokenType, fromToken);
00144 dbg.createNode(node);
00145 return node;
00146 }
00147
00148 public Object create(int tokenType, Token fromToken, String text) {
00149 Object node = adaptor.create(tokenType, fromToken, text);
00150 dbg.createNode(node);
00151 return node;
00152 }
00153
00154 public Object create(int tokenType, String text) {
00155 Object node = adaptor.create(tokenType, text);
00156 dbg.createNode(node);
00157 return node;
00158 }
00159
00160 public int getType(Object t) {
00161 return adaptor.getType(t);
00162 }
00163
00164 public void setType(Object t, int type) {
00165 adaptor.setType(t, type);
00166 }
00167
00168 public String getText(Object t) {
00169 return adaptor.getText(t);
00170 }
00171
00172 public void setText(Object t, String text) {
00173 adaptor.setText(t, text);
00174 }
00175
00176 public Token getToken(Object t) {
00177 return adaptor.getToken(t);
00178 }
00179
00180 public void setTokenBoundaries(Object t, Token startToken, Token stopToken) {
00181 adaptor.setTokenBoundaries(t, startToken, stopToken);
00182 if ( t!=null && startToken!=null && stopToken!=null ) {
00183 dbg.setTokenBoundaries(
00184 t, startToken.getTokenIndex(),
00185 stopToken.getTokenIndex());
00186 }
00187 }
00188
00189 public int getTokenStartIndex(Object t) {
00190 return adaptor.getTokenStartIndex(t);
00191 }
00192
00193 public int getTokenStopIndex(Object t) {
00194 return adaptor.getTokenStopIndex(t);
00195 }
00196
00197 public Object getChild(Object t, int i) {
00198 return adaptor.getChild(t, i);
00199 }
00200
00201 public void setChild(Object t, int i, Object child) {
00202 adaptor.setChild(t, i, child);
00203 }
00204
00205 public Object deleteChild(Object t, int i) {
00206 return deleteChild(t, i);
00207 }
00208
00209 public int getChildCount(Object t) {
00210 return adaptor.getChildCount(t);
00211 }
00212
00213 public int getUniqueID(Object node) {
00214 return adaptor.getUniqueID(node);
00215 }
00216
00217 public Object getParent(Object t) {
00218 return adaptor.getParent(t);
00219 }
00220
00221 public int getChildIndex(Object t) {
00222 return adaptor.getChildIndex(t);
00223 }
00224
00225 public void setParent(Object t, Object parent) {
00226 adaptor.setParent(t, parent);
00227 }
00228
00229 public void setChildIndex(Object t, int index) {
00230 adaptor.setChildIndex(t, index);
00231 }
00232
00233 public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) {
00234 adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t);
00235 }
00236
00237
00238
00239 public DebugEventListener getDebugListener() {
00240 return dbg;
00241 }
00242
00243 public void setDebugListener(DebugEventListener dbg) {
00244 this.dbg = dbg;
00245 }
00246
00247 public TreeAdaptor getTreeAdaptor() {
00248 return adaptor;
00249 }
00250 }