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 ASuperConstructorInvocation extends PConstructorInvocation
00040 {
00041 private TSuper _super_;
00042 private TLPar _lPar_;
00043 private final LinkedList _argumentList_ = new TypedLinkedList(new ArgumentList_Cast());
00044 private TRPar _rPar_;
00045 private TSemicolon _semicolon_;
00046
00047 private class ArgumentList_Cast implements Cast
00048 {
00049 public Object cast(Object o)
00050 {
00051 PExp node = (PExp) o;
00052
00053 if((node.parent() != null) &&
00054 (node.parent() != ASuperConstructorInvocation.this))
00055 {
00056 node.parent().removeChild(node);
00057 }
00058
00059 if((node.parent() == null) ||
00060 (node.parent() != ASuperConstructorInvocation.this))
00061 {
00062 node.parent(ASuperConstructorInvocation.this);
00063 }
00064
00065 return node;
00066 }
00067 }
00068 public ASuperConstructorInvocation()
00069 {
00070 }
00071 public ASuperConstructorInvocation(
00072 TSuper _super_,
00073 TLPar _lPar_,
00074 List _argumentList_,
00075 TRPar _rPar_,
00076 TSemicolon _semicolon_)
00077 {
00078 setSuper(_super_);
00079
00080 setLPar(_lPar_);
00081
00082 {
00083 Object temp[] = _argumentList_.toArray();
00084 for(int i = 0; i < temp.length; i++)
00085 {
00086 this._argumentList_.add(temp[i]);
00087 }
00088 }
00089
00090 setRPar(_rPar_);
00091
00092 setSemicolon(_semicolon_);
00093
00094 }
00095 public ASuperConstructorInvocation(
00096 TSuper _super_,
00097 TLPar _lPar_,
00098 XPExp _argumentList_,
00099 TRPar _rPar_,
00100 TSemicolon _semicolon_)
00101 {
00102 setSuper(_super_);
00103
00104 setLPar(_lPar_);
00105
00106 if(_argumentList_ != null)
00107 {
00108 while(_argumentList_ instanceof X1PExp)
00109 {
00110 this._argumentList_.addFirst(((X1PExp) _argumentList_).getPExp());
00111 _argumentList_ = ((X1PExp) _argumentList_).getXPExp();
00112 }
00113 this._argumentList_.addFirst(((X2PExp) _argumentList_).getPExp());
00114 }
00115
00116 setRPar(_rPar_);
00117
00118 setSemicolon(_semicolon_);
00119
00120 }
00121 public void apply(Switch sw)
00122 {
00123 ((Analysis) sw).caseASuperConstructorInvocation(this);
00124 }
00125 public Object clone()
00126 {
00127 return new ASuperConstructorInvocation(
00128 (TSuper) cloneNode(_super_),
00129 (TLPar) cloneNode(_lPar_),
00130 cloneList(_argumentList_),
00131 (TRPar) cloneNode(_rPar_),
00132 (TSemicolon) cloneNode(_semicolon_));
00133 }
00134 public LinkedList getArgumentList()
00135 {
00136 return _argumentList_;
00137 }
00138 public TLPar getLPar()
00139 {
00140 return _lPar_;
00141 }
00142 public TRPar getRPar()
00143 {
00144 return _rPar_;
00145 }
00146 public TSemicolon getSemicolon()
00147 {
00148 return _semicolon_;
00149 }
00150 public TSuper getSuper()
00151 {
00152 return _super_;
00153 }
00154 void removeChild(Node child)
00155 {
00156 if(_super_ == child)
00157 {
00158 _super_ = null;
00159 return;
00160 }
00161
00162 if(_lPar_ == child)
00163 {
00164 _lPar_ = null;
00165 return;
00166 }
00167
00168 if(_argumentList_.remove(child))
00169 {
00170 return;
00171 }
00172
00173 if(_rPar_ == child)
00174 {
00175 _rPar_ = null;
00176 return;
00177 }
00178
00179 if(_semicolon_ == child)
00180 {
00181 _semicolon_ = null;
00182 return;
00183 }
00184
00185 }
00186 void replaceChild(Node oldChild, Node newChild)
00187 {
00188 if(_super_ == oldChild)
00189 {
00190 setSuper((TSuper) newChild);
00191 return;
00192 }
00193
00194 if(_lPar_ == oldChild)
00195 {
00196 setLPar((TLPar) newChild);
00197 return;
00198 }
00199
00200 for(ListIterator i = _argumentList_.listIterator(); i.hasNext();)
00201 {
00202 if(i.next() == oldChild)
00203 {
00204 if(newChild != null)
00205 {
00206 i.set(newChild);
00207 oldChild.parent(null);
00208 return;
00209 }
00210
00211 i.remove();
00212 oldChild.parent(null);
00213 return;
00214 }
00215 }
00216
00217 if(_rPar_ == oldChild)
00218 {
00219 setRPar((TRPar) newChild);
00220 return;
00221 }
00222
00223 if(_semicolon_ == oldChild)
00224 {
00225 setSemicolon((TSemicolon) newChild);
00226 return;
00227 }
00228
00229 }
00230 public void setArgumentList(List list)
00231 {
00232 Object temp[] = list.toArray();
00233 for(int i = 0; i < temp.length; i++)
00234 {
00235 _argumentList_.add(temp[i]);
00236 }
00237 }
00238 public void setLPar(TLPar node)
00239 {
00240 if(_lPar_ != null)
00241 {
00242 _lPar_.parent(null);
00243 }
00244
00245 if(node != null)
00246 {
00247 if(node.parent() != null)
00248 {
00249 node.parent().removeChild(node);
00250 }
00251
00252 node.parent(this);
00253 }
00254
00255 _lPar_ = node;
00256 }
00257 public void setRPar(TRPar node)
00258 {
00259 if(_rPar_ != null)
00260 {
00261 _rPar_.parent(null);
00262 }
00263
00264 if(node != null)
00265 {
00266 if(node.parent() != null)
00267 {
00268 node.parent().removeChild(node);
00269 }
00270
00271 node.parent(this);
00272 }
00273
00274 _rPar_ = node;
00275 }
00276 public void setSemicolon(TSemicolon node)
00277 {
00278 if(_semicolon_ != null)
00279 {
00280 _semicolon_.parent(null);
00281 }
00282
00283 if(node != null)
00284 {
00285 if(node.parent() != null)
00286 {
00287 node.parent().removeChild(node);
00288 }
00289
00290 node.parent(this);
00291 }
00292
00293 _semicolon_ = node;
00294 }
00295 public void setSuper(TSuper node)
00296 {
00297 if(_super_ != null)
00298 {
00299 _super_.parent(null);
00300 }
00301
00302 if(node != null)
00303 {
00304 if(node.parent() != null)
00305 {
00306 node.parent().removeChild(node);
00307 }
00308
00309 node.parent(this);
00310 }
00311
00312 _super_ = node;
00313 }
00314 public String toString()
00315 {
00316 return ""
00317 + toString(_super_)
00318 + toString(_lPar_)
00319 + toString(_argumentList_)
00320 + toString(_rPar_)
00321 + toString(_semicolon_);
00322 }
00323 }