001 /* This file was generated with JastAdd2 (http://jastadd.org) version R20130213 */ 002 package AST; 003 004 import java.util.HashSet; 005 import java.io.File; 006 import java.util.*; 007 import beaver.*; 008 import java.util.ArrayList; 009 import java.util.zip.*; 010 import java.io.*; 011 import java.io.FileNotFoundException; 012 import java.util.Collection; 013 /** 014 * @production BytecodeTypeAccess : {@link TypeAccess}; 015 * @ast node 016 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.ast:10 017 */ 018 public class BytecodeTypeAccess extends TypeAccess implements Cloneable { 019 /** 020 * @apilevel low-level 021 */ 022 public void flushCache() { 023 } 024 /** 025 * @apilevel internal 026 */ 027 public void flushCollectionCache() { 028 } 029 /** 030 * @apilevel internal 031 */ 032 @SuppressWarnings({"unchecked", "cast"}) 033 public BytecodeTypeAccess clone() throws CloneNotSupportedException { 034 BytecodeTypeAccess node = (BytecodeTypeAccess)super.clone(); 035 node.in$Circle(false); 036 node.is$Final(false); 037 return node; 038 } 039 /** 040 * @apilevel internal 041 */ 042 @SuppressWarnings({"unchecked", "cast"}) 043 public BytecodeTypeAccess copy() { 044 045 try { 046 BytecodeTypeAccess node = (BytecodeTypeAccess) clone(); 047 node.parent = null; 048 if(children != null) 049 node.children = (ASTNode[]) children.clone(); 050 051 return node; 052 } catch (CloneNotSupportedException e) { 053 throw new Error("Error: clone not supported for " + getClass().getName()); 054 } 055 056 }/** 057 * Create a deep copy of the AST subtree at this node. 058 * The copy is dangling, i.e. has no parent. 059 * @return dangling copy of the subtree at this node 060 * @apilevel low-level 061 */ 062 @SuppressWarnings({"unchecked", "cast"}) 063 public BytecodeTypeAccess fullCopy() { 064 065 BytecodeTypeAccess tree = (BytecodeTypeAccess) copy(); 066 if (children != null) { 067 for (int i = 0; i < children.length; ++i) { 068 069 ASTNode child = (ASTNode) children[i]; 070 if(child != null) { 071 child = child.fullCopy(); 072 tree.setChild(child, i); 073 } 074 } 075 } 076 return tree; 077 078 } /** 079 * @ast method 080 * 081 */ 082 public BytecodeTypeAccess() { 083 super(); 084 085 086 } 087 /** 088 * Initializes the child array to the correct size. 089 * Initializes List and Opt nta children. 090 * @apilevel internal 091 * @ast method 092 * @ast method 093 * 094 */ 095 public void init$Children() { 096 } 097 /** 098 * @ast method 099 * 100 */ 101 public BytecodeTypeAccess(String p0, String p1) { 102 setPackage(p0); 103 setID(p1); 104 } 105 /** 106 * @ast method 107 * 108 */ 109 public BytecodeTypeAccess(beaver.Symbol p0, beaver.Symbol p1) { 110 setPackage(p0); 111 setID(p1); 112 } 113 /** 114 * @apilevel low-level 115 * @ast method 116 * 117 */ 118 protected int numChildren() { 119 return 0; 120 } 121 /** 122 * @apilevel internal 123 * @ast method 124 * 125 */ 126 public boolean mayHaveRewrite() { 127 return true; 128 } 129 /** 130 * Replaces the lexeme Package. 131 * @param value The new value for the lexeme Package. 132 * @apilevel high-level 133 * @ast method 134 * 135 */ 136 public void setPackage(String value) { 137 tokenString_Package = value; 138 } 139 /** 140 * JastAdd-internal setter for lexeme Package using the Beaver parser. 141 * @apilevel internal 142 * @ast method 143 * 144 */ 145 public void setPackage(beaver.Symbol symbol) { 146 if(symbol.value != null && !(symbol.value instanceof String)) 147 throw new UnsupportedOperationException("setPackage is only valid for String lexemes"); 148 tokenString_Package = (String)symbol.value; 149 Packagestart = symbol.getStart(); 150 Packageend = symbol.getEnd(); 151 } 152 /** 153 * Retrieves the value for the lexeme Package. 154 * @return The value for the lexeme Package. 155 * @apilevel high-level 156 * @ast method 157 * 158 */ 159 public String getPackage() { 160 return tokenString_Package != null ? tokenString_Package : ""; 161 } 162 /** 163 * Replaces the lexeme ID. 164 * @param value The new value for the lexeme ID. 165 * @apilevel high-level 166 * @ast method 167 * 168 */ 169 public void setID(String value) { 170 tokenString_ID = value; 171 } 172 /** 173 * JastAdd-internal setter for lexeme ID using the Beaver parser. 174 * @apilevel internal 175 * @ast method 176 * 177 */ 178 public void setID(beaver.Symbol symbol) { 179 if(symbol.value != null && !(symbol.value instanceof String)) 180 throw new UnsupportedOperationException("setID is only valid for String lexemes"); 181 tokenString_ID = (String)symbol.value; 182 IDstart = symbol.getStart(); 183 IDend = symbol.getEnd(); 184 } 185 /** 186 * Retrieves the value for the lexeme ID. 187 * @return The value for the lexeme ID. 188 * @apilevel high-level 189 * @ast method 190 * 191 */ 192 public String getID() { 193 return tokenString_ID != null ? tokenString_ID : ""; 194 } 195 /** 196 * @apilevel internal 197 */ 198 public ASTNode rewriteTo() { 199 // Declared in /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag at line 95 200 state().duringBoundNames++; 201 ASTNode result = rewriteRule0(); 202 state().duringBoundNames--; 203 return result; 204 } 205 /** 206 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:95 207 * @apilevel internal 208 */ private Access rewriteRule0() { 209 { 210 if(name().indexOf("$") == -1) 211 return new TypeAccess(packageName(), name()); 212 else { 213 String[] names = name().split("\\$"); 214 Access a = null; // the resulting access 215 String newName = null; // the subname to try 216 TypeDecl type = null; // qualifying type if one 217 for(int i = 0; i < names.length; i++) { 218 newName = newName == null ? names[i] : (newName + "$" + names[i]); 219 SimpleSet set; 220 if(type != null) 221 set = type.memberTypes(newName); 222 else if(packageName().equals("")) 223 set = lookupType(newName); 224 else { 225 TypeDecl typeDecl = lookupType(packageName(), newName); 226 set = SimpleSet.emptySet; 227 if(typeDecl != null) 228 set = set.add(typeDecl); 229 } 230 if(!set.isEmpty()) { 231 a = a == null ? (Access)new TypeAccess(packageName(), newName) : (Access)a.qualifiesAccess(new TypeAccess(newName)); 232 type = (TypeDecl)set.iterator().next(); 233 newName = null; // reset subname 234 } 235 } 236 if(a == null) { 237 a = new TypeAccess(packageName(), name()); 238 } 239 return a; 240 } 241 } } 242 }