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 AFormalParameter extends PFormalParameter
00040 {
00041 private final LinkedList _modifier_ = new TypedLinkedList(new Modifier_Cast());
00042 private PType _type_;
00043 private PVariableDeclaratorId _variableDeclaratorId_;
00044
00045 private class Modifier_Cast implements Cast
00046 {
00047 public Object cast(Object o)
00048 {
00049 PModifier node = (PModifier) o;
00050
00051 if((node.parent() != null) &&
00052 (node.parent() != AFormalParameter.this))
00053 {
00054 node.parent().removeChild(node);
00055 }
00056
00057 if((node.parent() == null) ||
00058 (node.parent() != AFormalParameter.this))
00059 {
00060 node.parent(AFormalParameter.this);
00061 }
00062
00063 return node;
00064 }
00065 }
00066 public AFormalParameter()
00067 {
00068 }
00069 public AFormalParameter(
00070 List _modifier_,
00071 PType _type_,
00072 PVariableDeclaratorId _variableDeclaratorId_)
00073 {
00074 {
00075 Object temp[] = _modifier_.toArray();
00076 for(int i = 0; i < temp.length; i++)
00077 {
00078 this._modifier_.add(temp[i]);
00079 }
00080 }
00081
00082 setType(_type_);
00083
00084 setVariableDeclaratorId(_variableDeclaratorId_);
00085
00086 }
00087 public AFormalParameter(
00088 XPModifier _modifier_,
00089 PType _type_,
00090 PVariableDeclaratorId _variableDeclaratorId_)
00091 {
00092 if(_modifier_ != null)
00093 {
00094 while(_modifier_ instanceof X1PModifier)
00095 {
00096 this._modifier_.addFirst(((X1PModifier) _modifier_).getPModifier());
00097 _modifier_ = ((X1PModifier) _modifier_).getXPModifier();
00098 }
00099 this._modifier_.addFirst(((X2PModifier) _modifier_).getPModifier());
00100 }
00101
00102 setType(_type_);
00103
00104 setVariableDeclaratorId(_variableDeclaratorId_);
00105
00106 }
00107 public void apply(Switch sw)
00108 {
00109 ((Analysis) sw).caseAFormalParameter(this);
00110 }
00111 public Object clone()
00112 {
00113 return new AFormalParameter(
00114 cloneList(_modifier_),
00115 (PType) cloneNode(_type_),
00116 (PVariableDeclaratorId) cloneNode(_variableDeclaratorId_));
00117 }
00118 public LinkedList getModifier()
00119 {
00120 return _modifier_;
00121 }
00122 public PType getType()
00123 {
00124 return _type_;
00125 }
00126 public PVariableDeclaratorId getVariableDeclaratorId()
00127 {
00128 return _variableDeclaratorId_;
00129 }
00130 void removeChild(Node child)
00131 {
00132 if(_modifier_.remove(child))
00133 {
00134 return;
00135 }
00136
00137 if(_type_ == child)
00138 {
00139 _type_ = null;
00140 return;
00141 }
00142
00143 if(_variableDeclaratorId_ == child)
00144 {
00145 _variableDeclaratorId_ = null;
00146 return;
00147 }
00148
00149 }
00150 void replaceChild(Node oldChild, Node newChild)
00151 {
00152 for(ListIterator i = _modifier_.listIterator(); i.hasNext();)
00153 {
00154 if(i.next() == oldChild)
00155 {
00156 if(newChild != null)
00157 {
00158 i.set(newChild);
00159 oldChild.parent(null);
00160 return;
00161 }
00162
00163 i.remove();
00164 oldChild.parent(null);
00165 return;
00166 }
00167 }
00168
00169 if(_type_ == oldChild)
00170 {
00171 setType((PType) newChild);
00172 return;
00173 }
00174
00175 if(_variableDeclaratorId_ == oldChild)
00176 {
00177 setVariableDeclaratorId((PVariableDeclaratorId) newChild);
00178 return;
00179 }
00180
00181 }
00182 public void setModifier(List list)
00183 {
00184 Object temp[] = list.toArray();
00185 for(int i = 0; i < temp.length; i++)
00186 {
00187 _modifier_.add(temp[i]);
00188 }
00189 }
00190 public void setType(PType node)
00191 {
00192 if(_type_ != null)
00193 {
00194 _type_.parent(null);
00195 }
00196
00197 if(node != null)
00198 {
00199 if(node.parent() != null)
00200 {
00201 node.parent().removeChild(node);
00202 }
00203
00204 node.parent(this);
00205 }
00206
00207 _type_ = node;
00208 }
00209 public void setVariableDeclaratorId(PVariableDeclaratorId node)
00210 {
00211 if(_variableDeclaratorId_ != null)
00212 {
00213 _variableDeclaratorId_.parent(null);
00214 }
00215
00216 if(node != null)
00217 {
00218 if(node.parent() != null)
00219 {
00220 node.parent().removeChild(node);
00221 }
00222
00223 node.parent(this);
00224 }
00225
00226 _variableDeclaratorId_ = node;
00227 }
00228 public String toString()
00229 {
00230 return ""
00231 + toString(_modifier_)
00232 + toString(_type_)
00233 + toString(_variableDeclaratorId_);
00234 }
00235 }