00001 package edu.ksu.cis.bandera.jjjc.node;
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
00029
00030
00031
00032
00033
00034
00035
00036 import ca.mcgill.sable.util.*;
00037 import edu.ksu.cis.bandera.jjjc.analysis.*;
00038
00039 public final class AArrayInitializer extends PArrayInitializer
00040 {
00041 private TLBrace _lBrace_;
00042 private final LinkedList _variableInitializer_ = new TypedLinkedList(new VariableInitializer_Cast());
00043 private TComma _comma_;
00044 private TRBrace _rBrace_;
00045
00046 private class VariableInitializer_Cast implements Cast
00047 {
00048 public Object cast(Object o)
00049 {
00050 PVariableInitializer node = (PVariableInitializer) o;
00051
00052 if((node.parent() != null) &&
00053 (node.parent() != AArrayInitializer.this))
00054 {
00055 node.parent().removeChild(node);
00056 }
00057
00058 if((node.parent() == null) ||
00059 (node.parent() != AArrayInitializer.this))
00060 {
00061 node.parent(AArrayInitializer.this);
00062 }
00063
00064 return node;
00065 }
00066 }
00067 public AArrayInitializer()
00068 {
00069 }
00070 public AArrayInitializer(
00071 TLBrace _lBrace_,
00072 List _variableInitializer_,
00073 TComma _comma_,
00074 TRBrace _rBrace_)
00075 {
00076 setLBrace(_lBrace_);
00077
00078 {
00079 Object temp[] = _variableInitializer_.toArray();
00080 for(int i = 0; i < temp.length; i++)
00081 {
00082 this._variableInitializer_.add(temp[i]);
00083 }
00084 }
00085
00086 setComma(_comma_);
00087
00088 setRBrace(_rBrace_);
00089
00090 }
00091 public AArrayInitializer(
00092 TLBrace _lBrace_,
00093 XPVariableInitializer _variableInitializer_,
00094 TComma _comma_,
00095 TRBrace _rBrace_)
00096 {
00097 setLBrace(_lBrace_);
00098
00099 if(_variableInitializer_ != null)
00100 {
00101 while(_variableInitializer_ instanceof X1PVariableInitializer)
00102 {
00103 this._variableInitializer_.addFirst(((X1PVariableInitializer) _variableInitializer_).getPVariableInitializer());
00104 _variableInitializer_ = ((X1PVariableInitializer) _variableInitializer_).getXPVariableInitializer();
00105 }
00106 this._variableInitializer_.addFirst(((X2PVariableInitializer) _variableInitializer_).getPVariableInitializer());
00107 }
00108
00109 setComma(_comma_);
00110
00111 setRBrace(_rBrace_);
00112
00113 }
00114 public void apply(Switch sw)
00115 {
00116 ((Analysis) sw).caseAArrayInitializer(this);
00117 }
00118 public Object clone()
00119 {
00120 return new AArrayInitializer(
00121 (TLBrace) cloneNode(_lBrace_),
00122 cloneList(_variableInitializer_),
00123 (TComma) cloneNode(_comma_),
00124 (TRBrace) cloneNode(_rBrace_));
00125 }
00126 public TComma getComma()
00127 {
00128 return _comma_;
00129 }
00130 public TLBrace getLBrace()
00131 {
00132 return _lBrace_;
00133 }
00134 public TRBrace getRBrace()
00135 {
00136 return _rBrace_;
00137 }
00138 public LinkedList getVariableInitializer()
00139 {
00140 return _variableInitializer_;
00141 }
00142 void removeChild(Node child)
00143 {
00144 if(_lBrace_ == child)
00145 {
00146 _lBrace_ = null;
00147 return;
00148 }
00149
00150 if(_variableInitializer_.remove(child))
00151 {
00152 return;
00153 }
00154
00155 if(_comma_ == child)
00156 {
00157 _comma_ = null;
00158 return;
00159 }
00160
00161 if(_rBrace_ == child)
00162 {
00163 _rBrace_ = null;
00164 return;
00165 }
00166
00167 }
00168 void replaceChild(Node oldChild, Node newChild)
00169 {
00170 if(_lBrace_ == oldChild)
00171 {
00172 setLBrace((TLBrace) newChild);
00173 return;
00174 }
00175
00176 for(ListIterator i = _variableInitializer_.listIterator(); i.hasNext();)
00177 {
00178 if(i.next() == oldChild)
00179 {
00180 if(newChild != null)
00181 {
00182 i.set(newChild);
00183 oldChild.parent(null);
00184 return;
00185 }
00186
00187 i.remove();
00188 oldChild.parent(null);
00189 return;
00190 }
00191 }
00192
00193 if(_comma_ == oldChild)
00194 {
00195 setComma((TComma) newChild);
00196 return;
00197 }
00198
00199 if(_rBrace_ == oldChild)
00200 {
00201 setRBrace((TRBrace) newChild);
00202 return;
00203 }
00204
00205 }
00206 public void setComma(TComma node)
00207 {
00208 if(_comma_ != null)
00209 {
00210 _comma_.parent(null);
00211 }
00212
00213 if(node != null)
00214 {
00215 if(node.parent() != null)
00216 {
00217 node.parent().removeChild(node);
00218 }
00219
00220 node.parent(this);
00221 }
00222
00223 _comma_ = node;
00224 }
00225 public void setLBrace(TLBrace node)
00226 {
00227 if(_lBrace_ != null)
00228 {
00229 _lBrace_.parent(null);
00230 }
00231
00232 if(node != null)
00233 {
00234 if(node.parent() != null)
00235 {
00236 node.parent().removeChild(node);
00237 }
00238
00239 node.parent(this);
00240 }
00241
00242 _lBrace_ = node;
00243 }
00244 public void setRBrace(TRBrace node)
00245 {
00246 if(_rBrace_ != null)
00247 {
00248 _rBrace_.parent(null);
00249 }
00250
00251 if(node != null)
00252 {
00253 if(node.parent() != null)
00254 {
00255 node.parent().removeChild(node);
00256 }
00257
00258 node.parent(this);
00259 }
00260
00261 _rBrace_ = node;
00262 }
00263 public void setVariableInitializer(List list)
00264 {
00265 Object temp[] = list.toArray();
00266 for(int i = 0; i < temp.length; i++)
00267 {
00268 _variableInitializer_.add(temp[i]);
00269 }
00270 }
00271 public String toString()
00272 {
00273 return ""
00274 + toString(_lBrace_)
00275 + toString(_variableInitializer_)
00276 + toString(_comma_)
00277 + toString(_rBrace_);
00278 }
00279 }