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 TypeImportOnDemandDecl : {@link ImportDecl}; 015 * @ast node 016 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:12 017 */ 018 public class TypeImportOnDemandDecl extends ImportDecl 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 TypeImportOnDemandDecl clone() throws CloneNotSupportedException { 034 TypeImportOnDemandDecl node = (TypeImportOnDemandDecl)super.clone(); 035 node.importedTypes_String_values = null; 036 node.in$Circle(false); 037 node.is$Final(false); 038 return node; 039 } 040 /** 041 * @apilevel internal 042 */ 043 @SuppressWarnings({"unchecked", "cast"}) 044 public TypeImportOnDemandDecl copy() { 045 046 try { 047 TypeImportOnDemandDecl node = (TypeImportOnDemandDecl) clone(); 048 node.parent = null; 049 if(children != null) 050 node.children = (ASTNode[]) children.clone(); 051 052 return node; 053 } catch (CloneNotSupportedException e) { 054 throw new Error("Error: clone not supported for " + getClass().getName()); 055 } 056 057 }/** 058 * Create a deep copy of the AST subtree at this node. 059 * The copy is dangling, i.e. has no parent. 060 * @return dangling copy of the subtree at this node 061 * @apilevel low-level 062 */ 063 @SuppressWarnings({"unchecked", "cast"}) 064 public TypeImportOnDemandDecl fullCopy() { 065 066 TypeImportOnDemandDecl tree = (TypeImportOnDemandDecl) copy(); 067 if (children != null) { 068 for (int i = 0; i < children.length; ++i) { 069 070 ASTNode child = (ASTNode) children[i]; 071 if(child != null) { 072 child = child.fullCopy(); 073 tree.setChild(child, i); 074 } 075 } 076 } 077 return tree; 078 079 } /** 080 * @ast method 081 * @aspect NameCheck 082 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:30 083 */ 084 public void nameCheck() { 085 if(getAccess().lastAccess().isTypeAccess() && !getAccess().type().typeName().equals(typeName())) 086 error("On demand type import " + typeName() + ".* is not the canonical name of type " + getAccess().type().typeName()); 087 } 088 /** 089 * @ast method 090 * @aspect PrettyPrint 091 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:56 092 */ 093 public void toString(StringBuffer s) { 094 s.append("import "); 095 getAccess().toString(s); 096 s.append(".*;\n"); 097 } 098 /** 099 * @ast method 100 * 101 */ 102 public TypeImportOnDemandDecl() { 103 super(); 104 105 106 } 107 /** 108 * Initializes the child array to the correct size. 109 * Initializes List and Opt nta children. 110 * @apilevel internal 111 * @ast method 112 * @ast method 113 * 114 */ 115 public void init$Children() { 116 children = new ASTNode[1]; 117 } 118 /** 119 * @ast method 120 * 121 */ 122 public TypeImportOnDemandDecl(Access p0) { 123 setChild(p0, 0); 124 } 125 /** 126 * @apilevel low-level 127 * @ast method 128 * 129 */ 130 protected int numChildren() { 131 return 1; 132 } 133 /** 134 * @apilevel internal 135 * @ast method 136 * 137 */ 138 public boolean mayHaveRewrite() { 139 return false; 140 } 141 /** 142 * Replaces the Access child. 143 * @param node The new node to replace the Access child. 144 * @apilevel high-level 145 * @ast method 146 * 147 */ 148 public void setAccess(Access node) { 149 setChild(node, 0); 150 } 151 /** 152 * Retrieves the Access child. 153 * @return The current node used as the Access child. 154 * @apilevel high-level 155 * @ast method 156 * 157 */ 158 public Access getAccess() { 159 return (Access)getChild(0); 160 } 161 /** 162 * Retrieves the Access child. 163 * <p><em>This method does not invoke AST transformations.</em></p> 164 * @return The current node used as the Access child. 165 * @apilevel low-level 166 * @ast method 167 * 168 */ 169 public Access getAccessNoTransform() { 170 return (Access)getChildNoTransform(0); 171 } 172 protected java.util.Map importedTypes_String_values; 173 /** 174 * @attribute syn 175 * @aspect TypeScopePropagation 176 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:329 177 */ 178 @SuppressWarnings({"unchecked", "cast"}) 179 public SimpleSet importedTypes(String name) { 180 Object _parameters = name; 181 if(importedTypes_String_values == null) importedTypes_String_values = new java.util.HashMap(4); 182 if(importedTypes_String_values.containsKey(_parameters)) { 183 return (SimpleSet)importedTypes_String_values.get(_parameters); 184 } 185 ASTNode$State state = state(); 186 int num = state.boundariesCrossed; 187 boolean isFinal = this.is$Final(); 188 SimpleSet importedTypes_String_value = importedTypes_compute(name); 189 if(isFinal && num == state().boundariesCrossed){ importedTypes_String_values.put(_parameters, importedTypes_String_value); } 190 return importedTypes_String_value; 191 } 192 /** 193 * @apilevel internal 194 */ 195 private SimpleSet importedTypes_compute(String name) { 196 SimpleSet set = SimpleSet.emptySet; 197 if(getAccess() instanceof PackageAccess) { 198 String packageName = ((PackageAccess)getAccess()).getPackage(); 199 TypeDecl typeDecl = lookupType(packageName, name); 200 if(typeDecl != null && typeDecl.accessibleFromPackage(packageName()) && 201 typeDecl.typeName().equals(packageName + "." + name)) // canonical names match 202 set = set.add(typeDecl); 203 } 204 else { 205 for(Iterator iter = getAccess().type().memberTypes(name).iterator(); iter.hasNext(); ) { 206 TypeDecl decl = (TypeDecl)iter.next(); 207 if(decl.accessibleFromPackage(packageName()) && 208 decl.typeName().equals(getAccess().typeName() + "." + name)) // canonical names match 209 set = set.add(decl); 210 } 211 } 212 return set; 213 } 214 /** 215 * @attribute syn 216 * @aspect TypeScopePropagation 217 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:351 218 */ 219 public boolean isOnDemand() { 220 ASTNode$State state = state(); 221 try { return true; } 222 finally { 223 } 224 } 225 /** 226 * @attribute inh 227 * @aspect TypeScopePropagation 228 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:348 229 */ 230 @SuppressWarnings({"unchecked", "cast"}) 231 public TypeDecl lookupType(String packageName, String typeName) { 232 ASTNode$State state = state(); 233 TypeDecl lookupType_String_String_value = getParent().Define_TypeDecl_lookupType(this, null, packageName, typeName); 234 return lookupType_String_String_value; 235 } 236 /** 237 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:107 238 * @apilevel internal 239 */ 240 public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) { 241 if(caller == getAccessNoTransform()) { 242 return NameType.PACKAGE_OR_TYPE_NAME; 243 } 244 else { return getParent().Define_NameType_nameType(this, caller); 245 } 246 } 247 /** 248 * @apilevel internal 249 */ 250 public ASTNode rewriteTo() { 251 return super.rewriteTo(); 252 } 253 }