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