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 AVariableDeclaratorId extends PVariableDeclaratorId
00040 {
00041 private TId _id_;
00042 private final LinkedList _dim_ = new TypedLinkedList(new Dim_Cast());
00043
00044 private class Dim_Cast implements Cast
00045 {
00046 public Object cast(Object o)
00047 {
00048 PDim node = (PDim) o;
00049
00050 if((node.parent() != null) &&
00051 (node.parent() != AVariableDeclaratorId.this))
00052 {
00053 node.parent().removeChild(node);
00054 }
00055
00056 if((node.parent() == null) ||
00057 (node.parent() != AVariableDeclaratorId.this))
00058 {
00059 node.parent(AVariableDeclaratorId.this);
00060 }
00061
00062 return node;
00063 }
00064 }
00065 public AVariableDeclaratorId()
00066 {
00067 }
00068 public AVariableDeclaratorId(
00069 TId _id_,
00070 List _dim_)
00071 {
00072 setId(_id_);
00073
00074 {
00075 Object temp[] = _dim_.toArray();
00076 for(int i = 0; i < temp.length; i++)
00077 {
00078 this._dim_.add(temp[i]);
00079 }
00080 }
00081
00082 }
00083 public AVariableDeclaratorId(
00084 TId _id_,
00085 XPDim _dim_)
00086 {
00087 setId(_id_);
00088
00089 if(_dim_ != null)
00090 {
00091 while(_dim_ instanceof X1PDim)
00092 {
00093 this._dim_.addFirst(((X1PDim) _dim_).getPDim());
00094 _dim_ = ((X1PDim) _dim_).getXPDim();
00095 }
00096 this._dim_.addFirst(((X2PDim) _dim_).getPDim());
00097 }
00098
00099 }
00100 public void apply(Switch sw)
00101 {
00102 ((Analysis) sw).caseAVariableDeclaratorId(this);
00103 }
00104 public Object clone()
00105 {
00106 return new AVariableDeclaratorId(
00107 (TId) cloneNode(_id_),
00108 cloneList(_dim_));
00109 }
00110 public LinkedList getDim()
00111 {
00112 return _dim_;
00113 }
00114 public TId getId()
00115 {
00116 return _id_;
00117 }
00118 void removeChild(Node child)
00119 {
00120 if(_id_ == child)
00121 {
00122 _id_ = null;
00123 return;
00124 }
00125
00126 if(_dim_.remove(child))
00127 {
00128 return;
00129 }
00130
00131 }
00132 void replaceChild(Node oldChild, Node newChild)
00133 {
00134 if(_id_ == oldChild)
00135 {
00136 setId((TId) newChild);
00137 return;
00138 }
00139
00140 for(ListIterator i = _dim_.listIterator(); i.hasNext();)
00141 {
00142 if(i.next() == oldChild)
00143 {
00144 if(newChild != null)
00145 {
00146 i.set(newChild);
00147 oldChild.parent(null);
00148 return;
00149 }
00150
00151 i.remove();
00152 oldChild.parent(null);
00153 return;
00154 }
00155 }
00156
00157 }
00158 public void setDim(List list)
00159 {
00160 Object temp[] = list.toArray();
00161 for(int i = 0; i < temp.length; i++)
00162 {
00163 _dim_.add(temp[i]);
00164 }
00165 }
00166 public void setId(TId node)
00167 {
00168 if(_id_ != null)
00169 {
00170 _id_.parent(null);
00171 }
00172
00173 if(node != null)
00174 {
00175 if(node.parent() != null)
00176 {
00177 node.parent().removeChild(node);
00178 }
00179
00180 node.parent(this);
00181 }
00182
00183 _id_ = node;
00184 }
00185 public String toString()
00186 {
00187 return ""
00188 + toString(_id_)
00189 + toString(_dim_);
00190 }
00191 }