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 AInterfaces extends PInterfaces
00040 {
00041 private TImplements _implements_;
00042 private final LinkedList _name_ = new TypedLinkedList(new Name_Cast());
00043
00044 private class Name_Cast implements Cast
00045 {
00046 public Object cast(Object o)
00047 {
00048 PName node = (PName) o;
00049
00050 if((node.parent() != null) &&
00051 (node.parent() != AInterfaces.this))
00052 {
00053 node.parent().removeChild(node);
00054 }
00055
00056 if((node.parent() == null) ||
00057 (node.parent() != AInterfaces.this))
00058 {
00059 node.parent(AInterfaces.this);
00060 }
00061
00062 return node;
00063 }
00064 }
00065 public AInterfaces()
00066 {
00067 }
00068 public AInterfaces(
00069 TImplements _implements_,
00070 List _name_)
00071 {
00072 setImplements(_implements_);
00073
00074 {
00075 Object temp[] = _name_.toArray();
00076 for(int i = 0; i < temp.length; i++)
00077 {
00078 this._name_.add(temp[i]);
00079 }
00080 }
00081
00082 }
00083 public AInterfaces(
00084 TImplements _implements_,
00085 XPName _name_)
00086 {
00087 setImplements(_implements_);
00088
00089 if(_name_ != null)
00090 {
00091 while(_name_ instanceof X1PName)
00092 {
00093 this._name_.addFirst(((X1PName) _name_).getPName());
00094 _name_ = ((X1PName) _name_).getXPName();
00095 }
00096 this._name_.addFirst(((X2PName) _name_).getPName());
00097 }
00098
00099 }
00100 public void apply(Switch sw)
00101 {
00102 ((Analysis) sw).caseAInterfaces(this);
00103 }
00104 public Object clone()
00105 {
00106 return new AInterfaces(
00107 (TImplements) cloneNode(_implements_),
00108 cloneList(_name_));
00109 }
00110 public TImplements getImplements()
00111 {
00112 return _implements_;
00113 }
00114 public LinkedList getName()
00115 {
00116 return _name_;
00117 }
00118 void removeChild(Node child)
00119 {
00120 if(_implements_ == child)
00121 {
00122 _implements_ = null;
00123 return;
00124 }
00125
00126 if(_name_.remove(child))
00127 {
00128 return;
00129 }
00130
00131 }
00132 void replaceChild(Node oldChild, Node newChild)
00133 {
00134 if(_implements_ == oldChild)
00135 {
00136 setImplements((TImplements) newChild);
00137 return;
00138 }
00139
00140 for(ListIterator i = _name_.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 setImplements(TImplements node)
00159 {
00160 if(_implements_ != null)
00161 {
00162 _implements_.parent(null);
00163 }
00164
00165 if(node != null)
00166 {
00167 if(node.parent() != null)
00168 {
00169 node.parent().removeChild(node);
00170 }
00171
00172 node.parent(this);
00173 }
00174
00175 _implements_ = node;
00176 }
00177 public void setName(List list)
00178 {
00179 Object temp[] = list.toArray();
00180 for(int i = 0; i < temp.length; i++)
00181 {
00182 _name_.add(temp[i]);
00183 }
00184 }
00185 public String toString()
00186 {
00187 return ""
00188 + toString(_implements_)
00189 + toString(_name_);
00190 }
00191 }