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 AInitClassInterfaceExp extends PExp
00040 {
00041 private TNew _new_;
00042 private PName _classOrInterfaceType_;
00043 private final LinkedList _dim_ = new TypedLinkedList(new Dim_Cast());
00044 private PArrayInitializer _arrayInitializer_;
00045
00046 private class Dim_Cast implements Cast
00047 {
00048 public Object cast(Object o)
00049 {
00050 PDim node = (PDim) o;
00051
00052 if((node.parent() != null) &&
00053 (node.parent() != AInitClassInterfaceExp.this))
00054 {
00055 node.parent().removeChild(node);
00056 }
00057
00058 if((node.parent() == null) ||
00059 (node.parent() != AInitClassInterfaceExp.this))
00060 {
00061 node.parent(AInitClassInterfaceExp.this);
00062 }
00063
00064 return node;
00065 }
00066 }
00067 public AInitClassInterfaceExp()
00068 {
00069 }
00070 public AInitClassInterfaceExp(
00071 TNew _new_,
00072 PName _classOrInterfaceType_,
00073 List _dim_,
00074 PArrayInitializer _arrayInitializer_)
00075 {
00076 setNew(_new_);
00077
00078 setClassOrInterfaceType(_classOrInterfaceType_);
00079
00080 {
00081 Object temp[] = _dim_.toArray();
00082 for(int i = 0; i < temp.length; i++)
00083 {
00084 this._dim_.add(temp[i]);
00085 }
00086 }
00087
00088 setArrayInitializer(_arrayInitializer_);
00089
00090 }
00091 public AInitClassInterfaceExp(
00092 TNew _new_,
00093 PName _classOrInterfaceType_,
00094 XPDim _dim_,
00095 PArrayInitializer _arrayInitializer_)
00096 {
00097 setNew(_new_);
00098
00099 setClassOrInterfaceType(_classOrInterfaceType_);
00100
00101 if(_dim_ != null)
00102 {
00103 while(_dim_ instanceof X1PDim)
00104 {
00105 this._dim_.addFirst(((X1PDim) _dim_).getPDim());
00106 _dim_ = ((X1PDim) _dim_).getXPDim();
00107 }
00108 this._dim_.addFirst(((X2PDim) _dim_).getPDim());
00109 }
00110
00111 setArrayInitializer(_arrayInitializer_);
00112
00113 }
00114 public void apply(Switch sw)
00115 {
00116 ((Analysis) sw).caseAInitClassInterfaceExp(this);
00117 }
00118 public Object clone()
00119 {
00120 return new AInitClassInterfaceExp(
00121 (TNew) cloneNode(_new_),
00122 (PName) cloneNode(_classOrInterfaceType_),
00123 cloneList(_dim_),
00124 (PArrayInitializer) cloneNode(_arrayInitializer_));
00125 }
00126 public PArrayInitializer getArrayInitializer()
00127 {
00128 return _arrayInitializer_;
00129 }
00130 public PName getClassOrInterfaceType()
00131 {
00132 return _classOrInterfaceType_;
00133 }
00134 public LinkedList getDim()
00135 {
00136 return _dim_;
00137 }
00138 public TNew getNew()
00139 {
00140 return _new_;
00141 }
00142 void removeChild(Node child)
00143 {
00144 if(_new_ == child)
00145 {
00146 _new_ = null;
00147 return;
00148 }
00149
00150 if(_classOrInterfaceType_ == child)
00151 {
00152 _classOrInterfaceType_ = null;
00153 return;
00154 }
00155
00156 if(_dim_.remove(child))
00157 {
00158 return;
00159 }
00160
00161 if(_arrayInitializer_ == child)
00162 {
00163 _arrayInitializer_ = null;
00164 return;
00165 }
00166
00167 }
00168 void replaceChild(Node oldChild, Node newChild)
00169 {
00170 if(_new_ == oldChild)
00171 {
00172 setNew((TNew) newChild);
00173 return;
00174 }
00175
00176 if(_classOrInterfaceType_ == oldChild)
00177 {
00178 setClassOrInterfaceType((PName) newChild);
00179 return;
00180 }
00181
00182 for(ListIterator i = _dim_.listIterator(); i.hasNext();)
00183 {
00184 if(i.next() == oldChild)
00185 {
00186 if(newChild != null)
00187 {
00188 i.set(newChild);
00189 oldChild.parent(null);
00190 return;
00191 }
00192
00193 i.remove();
00194 oldChild.parent(null);
00195 return;
00196 }
00197 }
00198
00199 if(_arrayInitializer_ == oldChild)
00200 {
00201 setArrayInitializer((PArrayInitializer) newChild);
00202 return;
00203 }
00204
00205 }
00206 public void setArrayInitializer(PArrayInitializer node)
00207 {
00208 if(_arrayInitializer_ != null)
00209 {
00210 _arrayInitializer_.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 _arrayInitializer_ = node;
00224 }
00225 public void setClassOrInterfaceType(PName node)
00226 {
00227 if(_classOrInterfaceType_ != null)
00228 {
00229 _classOrInterfaceType_.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 _classOrInterfaceType_ = node;
00243 }
00244 public void setDim(List list)
00245 {
00246 Object temp[] = list.toArray();
00247 for(int i = 0; i < temp.length; i++)
00248 {
00249 _dim_.add(temp[i]);
00250 }
00251 }
00252 public void setNew(TNew node)
00253 {
00254 if(_new_ != null)
00255 {
00256 _new_.parent(null);
00257 }
00258
00259 if(node != null)
00260 {
00261 if(node.parent() != null)
00262 {
00263 node.parent().removeChild(node);
00264 }
00265
00266 node.parent(this);
00267 }
00268
00269 _new_ = node;
00270 }
00271 public String toString()
00272 {
00273 return ""
00274 + toString(_new_)
00275 + toString(_classOrInterfaceType_)
00276 + toString(_dim_)
00277 + toString(_arrayInitializer_);
00278 }
00279 }