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 TypeDecl : {@link ASTNode} ::= <span class="component">{@link Modifiers}</span> <span class="component">&lt;ID:String&gt;</span> <span class="component">{@link BodyDecl}*</span>;
015     * @ast node
016     * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:41
017     */
018    public abstract class TypeDecl extends ASTNode<ASTNode> implements Cloneable, SimpleSet, Iterator, VariableScope {
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 TypeDecl clone() throws CloneNotSupportedException {
034        TypeDecl node = (TypeDecl)super.clone();
035        node.accessibleFromPackage_String_values = null;
036        node.accessibleFromExtend_TypeDecl_values = null;
037        node.accessibleFrom_TypeDecl_values = null;
038        node.dimension_computed = false;
039        node.elementType_computed = false;
040        node.elementType_value = null;
041        node.arrayType_computed = false;
042        node.arrayType_value = null;
043        node.isException_computed = false;
044        node.isCheckedException_computed = false;
045        node.isUncheckedException_computed = false;
046        node.mayCatch_TypeDecl_values = null;
047        node.constructors_computed = false;
048        node.constructors_value = null;
049        node.unqualifiedLookupMethod_String_values = null;
050        node.methodsNameMap_computed = false;
051        node.methodsNameMap_value = null;
052        node.localMethodsSignatureMap_computed = false;
053        node.localMethodsSignatureMap_value = null;
054        node.methodsSignatureMap_computed = false;
055        node.methodsSignatureMap_value = null;
056        node.ancestorMethods_String_values = null;
057        node.localTypeDecls_String_values = null;
058        node.memberTypes_String_values = null;
059        node.localFields_String_values = null;
060        node.localFieldsMap_computed = false;
061        node.localFieldsMap_value = null;
062        node.memberFieldsMap_computed = false;
063        node.memberFieldsMap_value = null;
064        node.memberFields_String_values = null;
065        node.hasAbstract_computed = false;
066        node.unimplementedMethods_computed = false;
067        node.unimplementedMethods_value = null;
068        node.isPublic_computed = false;
069        node.isStatic_computed = false;
070        node.fullName_computed = false;
071        node.fullName_value = null;
072        node.typeName_computed = false;
073        node.typeName_value = null;
074        node.narrowingConversionTo_TypeDecl_values = null;
075        node.methodInvocationConversionTo_TypeDecl_values = null;
076        node.castingConversionTo_TypeDecl_values = null;
077        node.isString_computed = false;
078        node.isObject_computed = false;
079        node.instanceOf_TypeDecl_values = null;
080        node.isCircular_visited = -1;
081        node.isCircular_computed = false;
082        node.isCircular_initialized = false;
083        node.innerClassesAttributeEntries_computed = false;
084        node.innerClassesAttributeEntries_value = null;
085        node.attributes_computed = false;
086        node.attributes_value = null;
087        node.clinit_attributes_computed = false;
088        node.clinit_attributes_value = null;
089        node.constantPool_computed = false;
090        node.constantPool_value = null;
091        node.constantPoolName_computed = false;
092        node.constantPoolName_value = null;
093        node.typeDescriptor_computed = false;
094        node.typeDescriptor_value = null;
095        node.hasClinit_computed = false;
096        node.bytecodes_ConstantPool_values = null;
097        node.flags_computed = false;
098        node.bcFields_computed = false;
099        node.bcFields_value = null;
100        node.enclosingVariables_computed = false;
101        node.enclosingVariables_value = null;
102        node.uniqueIndex_computed = false;
103        node.jvmName_computed = false;
104        node.jvmName_value = null;
105        node.boxed_computed = false;
106        node.boxed_value = null;
107        node.unboxed_computed = false;
108        node.unboxed_value = null;
109        node.isIterable_computed = false;
110        node.involvesTypeParameters_visited = -1;
111        node.involvesTypeParameters_computed = false;
112        node.involvesTypeParameters_initialized = false;
113        node.erasure_computed = false;
114        node.erasure_value = null;
115        node.implementedInterfaces_computed = false;
116        node.implementedInterfaces_value = null;
117        node.usesTypeVariable_visited = -1;
118        node.usesTypeVariable_computed = false;
119        node.usesTypeVariable_initialized = false;
120        node.sourceTypeDecl_computed = false;
121        node.sourceTypeDecl_value = null;
122        node.containedIn_TypeDecl_values = null;
123        node.sameStructure_TypeDecl_values = null;
124        node.subtype_TypeDecl_values = null;
125        node.createEnumMethod_TypeDecl_values = null;
126        node.createEnumIndex_EnumConstant_values = null;
127        node.createEnumArray_TypeDecl_values = null;
128        node.needsSignatureAttribute_computed = false;
129        node.classSignature_computed = false;
130        node.classSignature_value = null;
131        node.fieldTypeSignature_computed = false;
132        node.fieldTypeSignature_value = null;
133        node.classTypeSignature_computed = false;
134        node.classTypeSignature_value = null;
135        node.componentType_computed = false;
136        node.componentType_value = null;
137        node.isDAbefore_Variable_values = null;
138        node.isDUbefore_Variable_values = null;
139        node.typeException_computed = false;
140        node.typeException_value = null;
141        node.typeRuntimeException_computed = false;
142        node.typeRuntimeException_value = null;
143        node.typeError_computed = false;
144        node.typeError_value = null;
145        node.lookupMethod_String_values = null;
146        node.typeObject_computed = false;
147        node.typeObject_value = null;
148        node.lookupType_String_values = null;
149        node.lookupVariable_String_values = null;
150        node.packageName_computed = false;
151        node.packageName_value = null;
152        node.isAnonymous_computed = false;
153        node.unknownType_computed = false;
154        node.unknownType_value = null;
155        node.inExplicitConstructorInvocation_computed = false;
156        node.inStaticContext_computed = false;
157        node.destinationPath_computed = false;
158        node.destinationPath_value = null;
159        node.in$Circle(false);
160        node.is$Final(false);
161        return node;
162      }
163      /**
164       * @ast method 
165       * @aspect AnonymousClasses
166       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AnonymousClasses.jrag:28
167       */
168      
169    
170      public int anonymousIndex = 0;
171      /**
172       * @ast method 
173       * @aspect AnonymousClasses
174       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AnonymousClasses.jrag:45
175       */
176      public int nextAnonymousIndex() {
177        if(isNestedType())
178          return enclosingType().nextAnonymousIndex();
179        return anonymousIndex++;
180      }
181      /**
182       * @ast method 
183       * @aspect BoundNames
184       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:24
185       */
186      public MethodDecl addMemberMethod(MethodDecl m) {
187        addBodyDecl(m);
188        return (MethodDecl)getBodyDecl(getNumBodyDecl()-1);
189        /*
190        HashMap map = methodsNameMap();
191        ArrayList list = (ArrayList)map.get(m.name());
192        if(list == null) {
193          list = new ArrayList(4);
194          map.put(m.name(), list);
195        }
196        list.add(m);
197        if(!memberMethods(m.name()).contains(m))
198          throw new Error("The method " + m.signature() + " added to " + typeName() + " can not be found using lookupMemberMethod");
199        */
200      }
201      /**
202       * @ast method 
203       * @aspect BoundNames
204       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:40
205       */
206      public ConstructorDecl addConstructor(ConstructorDecl c) {
207        addBodyDecl(c);
208        return (ConstructorDecl)getBodyDecl(getNumBodyDecl()-1);
209      }
210      /**
211       * @ast method 
212       * @aspect BoundNames
213       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:45
214       */
215      public ClassDecl addMemberClass(ClassDecl c) {
216        addBodyDecl(new MemberClassDecl(c));
217        return ((MemberClassDecl)getBodyDecl(getNumBodyDecl()-1)).getClassDecl();
218      }
219      /**
220       * @ast method 
221       * @aspect BoundNames
222       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:52
223       */
224      public FieldDeclaration addMemberField(FieldDeclaration f) {
225        addBodyDecl(f);
226        return (FieldDeclaration)getBodyDecl(getNumBodyDecl()-1);
227        //if(!memberFields(f.name()).contains(f))
228        //  throw new Error("The field " + f.name() + " added to " + typeName() + " can not be found using lookupMemberField");
229      }
230      /**
231       * @ast method 
232       * @aspect BoundNames
233       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:90
234       */
235      public TypeAccess createBoundAccess() {
236        return new BoundTypeAccess("", name(), this);
237      }
238      /**
239       * @ast method 
240       * @aspect DataStructures
241       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:136
242       */
243      public SimpleSet add(Object o) {
244        return new SimpleSetImpl().add(this).add(o);
245      }
246      /**
247       * @ast method 
248       * @aspect DataStructures
249       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:140
250       */
251      public boolean isSingleton() { return true; }
252      /**
253       * @ast method 
254       * @aspect DataStructures
255       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:141
256       */
257      public boolean isSingleton(Object o) { return contains(o); }
258      /**
259       * @ast method 
260       * @aspect DataStructures
261       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:144
262       */
263      
264      private TypeDecl iterElem;
265      /**
266       * @ast method 
267       * @aspect DataStructures
268       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:145
269       */
270      public Iterator iterator() { iterElem = this; return this; }
271      /**
272       * @ast method 
273       * @aspect DataStructures
274       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:146
275       */
276      public boolean hasNext() { return iterElem != null; }
277      /**
278       * @ast method 
279       * @aspect DataStructures
280       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:147
281       */
282      public Object next() { Object o = iterElem; iterElem = null; return o; }
283      /**
284       * @ast method 
285       * @aspect DataStructures
286       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:148
287       */
288      public void remove() { throw new UnsupportedOperationException(); }
289      /**
290       * @ast method 
291       * @aspect DeclareBeforeUse
292       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DeclareBeforeUse.jrag:41
293       */
294      public boolean declaredBeforeUse(Variable decl, ASTNode use) {
295        int indexDecl = ((ASTNode)decl).varChildIndex(this);
296        int indexUse = use.varChildIndex(this);
297        return indexDecl < indexUse;
298      }
299      /**
300       * @ast method 
301       * @aspect DeclareBeforeUse
302       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DeclareBeforeUse.jrag:46
303       */
304      public boolean declaredBeforeUse(Variable decl, int indexUse) {
305        int indexDecl = ((ASTNode)decl).varChildIndex(this);
306        return indexDecl < indexUse;
307      }
308      /**
309       * @ast method 
310       * @aspect ConstructorLookup
311       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:88
312       */
313      public ConstructorDecl lookupConstructor(ConstructorDecl signature) {
314        for(Iterator iter = constructors().iterator(); iter.hasNext(); ) {
315          ConstructorDecl decl = (ConstructorDecl)iter.next();
316          if(decl.sameSignature(signature)) {
317            return decl;
318          }
319        }
320        return null;
321      }
322      /**
323       * @return true if the method access may access the method
324       * @ast method 
325       * @aspect MethodDecl
326       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:189
327       */
328      public boolean mayAccess(MethodAccess access, MethodDecl method) {
329        if (instanceOf(method.hostType())
330            && access.qualifier().type().instanceOf(this))
331            return true;
332    
333        if (isNestedType())
334          return enclosingType().mayAccess(access, method);
335        else
336          return false;
337      }
338      /**
339       * @ast method 
340       * @aspect MemberMethods
341       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:231
342       */
343      public Iterator localMethodsIterator() {
344        return new Iterator() {
345          private Iterator outer = localMethodsSignatureMap().values().iterator();
346          private Iterator inner = null;
347          public boolean hasNext() {
348            if((inner == null || !inner.hasNext()) && outer.hasNext())
349              inner = ((SimpleSet)outer.next()).iterator();
350            return inner == null ? false : inner.hasNext();
351          }
352          public Object next() {
353            return inner.next();
354          }
355          public void remove() { throw new UnsupportedOperationException(); }
356        };
357        //return localMethodsSignatureMap().values().iterator();
358      }
359      /**
360       * @ast method 
361       * @aspect MemberMethods
362       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:299
363       */
364      public Iterator methodsIterator() {
365        return new Iterator() {
366          private Iterator outer = methodsSignatureMap().values().iterator();
367          private Iterator inner = null;
368          public boolean hasNext() {
369            if((inner == null || !inner.hasNext()) && outer.hasNext())
370              inner = ((SimpleSet)outer.next()).iterator();
371            return inner != null ? inner.hasNext() : false;
372          }
373          public Object next() {
374            return inner.next();
375          }
376          public void remove() { throw new UnsupportedOperationException(); }
377        };
378      }
379      /**
380       * @ast method 
381       * @aspect MemberMethods
382       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:364
383       */
384      protected boolean allMethodsAbstract(SimpleSet set) {
385        if(set == null) return true;
386        for(Iterator iter = set.iterator(); iter.hasNext(); ) {
387          MethodDecl m = (MethodDecl)iter.next();
388          if(!m.isAbstract())
389            return false;
390        }
391        return true;
392      }
393      /**
394       * @return true if the expression may access the field
395       * @ast method 
396       * @aspect VariableScope
397       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:213
398       */
399      public boolean mayAccess(Expr expr, FieldDeclaration field) {
400        if (instanceOf(field.hostType())) {
401          if (!field.isInstanceVariable()
402              || expr.isSuperAccess()
403              || expr.type().instanceOf(this))
404            return true;
405        }
406    
407        if (isNestedType()) {
408          return enclosingType().mayAccess(expr, field);
409        } else {
410          return false;
411        }
412      }
413      /**
414       * @ast method 
415       * @aspect Fields
416       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:315
417       */
418      public Iterator fieldsIterator() {
419        return new Iterator() {
420          private Iterator outer = memberFieldsMap().values().iterator();
421          private Iterator inner = null;
422          public boolean hasNext() {
423            if((inner == null || !inner.hasNext()) && outer.hasNext())
424              inner = ((SimpleSet)outer.next()).iterator();
425            return inner != null ? inner.hasNext() : false;
426          }
427          public Object next() {
428            return inner.next();
429          }
430          public void remove() { throw new UnsupportedOperationException(); }
431        };
432      }
433      /**
434       * @ast method 
435       * @aspect Modifiers
436       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:68
437       */
438      public void checkModifiers() {
439        super.checkModifiers();
440        // 8.1.1
441        if(isPublic() && !isTopLevelType() && !isMemberType())
442          error("public pertains only to top level types and member types");
443    
444        // 8.1.1
445        if((isProtected() || isPrivate()) && !(isMemberType() && enclosingType().isClassDecl()))
446          error("protected and private may only be used on member types within a directly enclosing class declaration");
447    
448        // 8.1.1
449        if(isStatic() && !isMemberType())
450          error("static pertains only to member types");
451        
452        
453        // 8.4.3.1
454        // 8.1.1.1
455        if(!isAbstract() && hasAbstract()) {
456          StringBuffer s = new StringBuffer();
457          s.append("" + name() + " is not declared abstract but contains abstract members: \n");
458          for(Iterator iter = unimplementedMethods().iterator(); iter.hasNext(); ) {
459            MethodDecl m = (MethodDecl)iter.next();
460            s.append("  " + m.signature() + " in " + m.hostType().typeName() + "\n");
461          }
462          error(s.toString());
463        }
464      }
465      /**
466       * @ast method 
467       * @aspect NameCheck
468       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:251
469       */
470      public void nameCheck() {
471        if(isTopLevelType() && lookupType(packageName(), name()) != this)
472          error("duplicate type " + name() + " in package " + packageName());
473      
474        if(!isTopLevelType() && !isAnonymous() && !isLocalClass() && extractSingleType(enclosingType().memberTypes(name())) != this)
475          error("duplicate member type " + name() + " in type " + enclosingType().typeName());
476    
477        // 14.3
478        if(isLocalClass()) {
479          TypeDecl typeDecl = extractSingleType(lookupType(name()));
480          if(typeDecl != null && typeDecl != this && typeDecl.isLocalClass() && enclosingBlock() == typeDecl.enclosingBlock())
481            error("local class named " + name() + " may not be redeclared as a local class in the same block");
482        }
483    
484        if(!packageName().equals("") && hasPackage(fullName()))
485          error("type name conflicts with a package using the same name: " + name());
486        
487        // 8.1 & 9.1
488        if(hasEnclosingTypeDecl(name())) {
489          error("type may not have the same simple name as an enclosing type declaration");
490        }
491      }
492      /**
493       * @ast method 
494       * @aspect PrettyPrint
495       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:62
496       */
497      protected void ppBodyDecls(StringBuffer s) {
498        s.append(" {");
499        for(int i=0; i < getNumBodyDecl(); i++) {
500          getBodyDecl(i).toString(s);
501        }
502        s.append(indent() + "}");
503      }
504      /**
505       * @ast method 
506       * @aspect CreateQualifiedAccesses
507       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:96
508       */
509      public Access createQualifiedAccess() {
510        if(isLocalClass() || isAnonymous()) {
511          return new TypeAccess(name());
512        }
513        else if(!isTopLevelType()) {
514          return enclosingType().createQualifiedAccess().qualifiesAccess(new TypeAccess(name()));
515        }
516        else {
517          return new TypeAccess(packageName(), name());
518        }
519      }
520      /**
521       * @ast method 
522       * @aspect TypeAnalysis
523       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:234
524       */
525      public FieldDeclaration findSingleVariable(String name) {
526        return (FieldDeclaration)memberFields(name).iterator().next();
527      }
528      /**
529       * @ast method 
530       * @aspect TypeHierarchyCheck
531       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:157
532       */
533      public void refined_TypeHierarchyCheck_TypeDecl_typeCheck() {
534        // 8.4.6.4 & 9.4.1
535        for(Iterator iter1 = localMethodsIterator(); iter1.hasNext(); ) {
536          MethodDecl m = (MethodDecl)iter1.next();
537          ASTNode target = m.hostType() == this ? (ASTNode)m : (ASTNode)this;
538          
539          //for(Iterator i2 = overrides(m).iterator(); i2.hasNext(); ) {
540          for(Iterator i2 = ancestorMethods(m.signature()).iterator(); i2.hasNext(); ) {
541            MethodDecl decl = (MethodDecl)i2.next();
542            if(m.overrides(decl)) {
543              // 8.4.6.1
544              if(!m.isStatic() && decl.isStatic())
545                target.error("an instance method may not override a static method");
546     
547              // regardless of overriding
548              // 8.4.6.3
549              if(!m.mayOverrideReturn(decl))
550                target.error("the return type of method " + m.signature() + " in " + m.hostType().typeName() + " does not match the return type of method " + decl.signature() + " in " + decl.hostType().typeName() + " and may thus not be overriden");
551     
552              // regardless of overriding
553              // 8.4.4
554              for(int i = 0; i < m.getNumException(); i++) {
555                Access e = m.getException(i);
556                boolean found = false;
557                for(int j = 0; !found && j < decl.getNumException(); j++) {
558                  if(e.type().instanceOf(decl.getException(j).type()))
559                    found = true;
560                }
561                if(!found && e.type().isUncheckedException())
562                  target.error(m.signature() + " in " + m.hostType().typeName() + " may not throw more checked exceptions than overridden method " +
563                   decl.signature() + " in " + decl.hostType().typeName());
564              }
565              // 8.4.6.3
566              if(decl.isPublic() && !m.isPublic())
567                target.error("overriding access modifier error");
568              // 8.4.6.3
569              if(decl.isProtected() && !(m.isPublic() || m.isProtected()))
570                target.error("overriding access modifier error");
571              // 8.4.6.3
572              if((!decl.isPrivate() && !decl.isProtected() && !decl.isPublic()) && m.isPrivate())
573                target.error("overriding access modifier error");
574     
575              // regardless of overriding
576              if(decl.isFinal())
577                target.error("method " + m.signature() + " in " + hostType().typeName() + " can not override final method " + decl.signature() + " in " + decl.hostType().typeName());
578            }
579            if(m.hides(decl)) {
580              // 8.4.6.2
581              if(m.isStatic() && !decl.isStatic())
582                target.error("a static method may not hide an instance method");
583              // 8.4.6.3
584              if(!m.mayOverrideReturn(decl))
585                target.error("can not hide a method with a different return type");
586              // 8.4.4
587              for(int i = 0; i < m.getNumException(); i++) {
588                Access e = m.getException(i);
589                boolean found = false;
590                for(int j = 0; !found && j < decl.getNumException(); j++) {
591                  if(e.type().instanceOf(decl.getException(j).type()))
592                    found = true;
593                }
594                if(!found)
595                  target.error("may not throw more checked exceptions than hidden method");
596              }
597              // 8.4.6.3
598              if(decl.isPublic() && !m.isPublic())
599                target.error("hiding access modifier error: public method " + decl.signature() + " in " + decl.hostType().typeName() + " is hidden by non public method " + m.signature() + " in " + m.hostType().typeName());
600              // 8.4.6.3
601              if(decl.isProtected() && !(m.isPublic() || m.isProtected()))
602                target.error("hiding access modifier error: protected method " + decl.signature() + " in " + decl.hostType().typeName() + " is hidden by non (public|protected) method " + m.signature() + " in " + m.hostType().typeName());
603              // 8.4.6.3
604              if((!decl.isPrivate() && !decl.isProtected() && !decl.isPublic()) && m.isPrivate())
605                target.error("hiding access modifier error: default method " + decl.signature() + " in " + decl.hostType().typeName() + " is hidden by private method " + m.signature() + " in " + m.hostType().typeName());
606              if(decl.isFinal())
607                target.error("method " + m.signature() + " in " + hostType().typeName() + " can not hide final method " + decl.signature() + " in " + decl.hostType().typeName());
608            }
609          }
610        }
611      }
612      /**
613       * @ast method 
614       * @aspect Attributes
615       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Attributes.jrag:58
616       */
617      public int addConstant(ConstantPool p, Constant c)     { 
618        if(isString()) return p.addConstant(c.stringValue());
619        throw new Error("Not supported"); 
620      }
621      /**
622       * @ast method 
623       * @aspect CodeGeneration
624       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:542
625       */
626      public void emitPushConstant(CodeGeneration gen, int value) { }
627      /**
628       * @ast method 
629       * @aspect CodeGeneration
630       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:612
631       */
632      public void emitReturn(CodeGeneration gen) { error(); }
633      /**
634       * @ast method 
635       * @aspect CodeGeneration
636       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:634
637       */
638      public void emitLoadLocal(CodeGeneration gen, int pos) {error();}
639      /**
640       * @ast method 
641       * @aspect CodeGeneration
642       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:747
643       */
644      public void emitStoreLocal(CodeGeneration gen, int pos) {error();}
645      /**
646       * @ast method 
647       * @aspect CodeGeneration
648       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:844
649       */
650      public void emitDup(CodeGeneration gen)      { gen.emit(Bytecode.DUP); }
651      /**
652       * @ast method 
653       * @aspect CodeGeneration
654       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:849
655       */
656      public void emitDup_x1(CodeGeneration gen)   { gen.emit(Bytecode.DUP_X1); }
657      /**
658       * @ast method 
659       * @aspect CodeGeneration
660       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:854
661       */
662      public void emitDup_x2(CodeGeneration gen)   { gen.emit(Bytecode.DUP_X2); }
663      /**
664       * @ast method 
665       * @aspect CodeGeneration
666       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:859
667       */
668      public void emitPop(CodeGeneration gen)      { gen.emit(Bytecode.POP); }
669      /**
670       * @ast method 
671       * @aspect CodeGeneration
672       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:930
673       */
674      public void emitNew(CodeGeneration gen) {
675        int index = gen.constantPool().addClass(constantPoolName());
676        gen.emit(Bytecode.NEW).add2(index);
677      }
678      /**
679       * @ast method 
680       * @aspect CodeGenerationConversions
681       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:941
682       */
683      void emitCastTo(CodeGeneration gen, TypeDecl type) { throw new Error("CastTo not implemented for " + getClass().getName()); }
684      /**
685       * @ast method 
686       * @aspect CodeGenerationConversions
687       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:953
688       */
689      void intToThis(CodeGeneration gen) { throw new Error("intToThis not implemented for " + getClass().getName()); }
690      /**
691       * @ast method 
692       * @aspect CodeGenerationConversions
693       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:962
694       */
695      void floatToThis(CodeGeneration gen) { throw new Error("floatToThis not implemented for " + getClass().getName()); }
696      /**
697       * @ast method 
698       * @aspect CodeGenerationConversions
699       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:971
700       */
701      void doubleToThis(CodeGeneration gen) { throw new Error("doubleToThis not implemented for " + getClass().getName()); }
702      /**
703       * @ast method 
704       * @aspect CodeGenerationConversions
705       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:980
706       */
707      void longToThis(CodeGeneration gen) { throw new Error("longToThis not implemented for " + getClass().getName()); }
708      /**
709       * @ast method 
710       * @aspect CodeGenerationConversions
711       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:989
712       */
713      void byteToThis(CodeGeneration gen) { throw new Error("byteToThis not implemented for " + getClass().getName()); }
714      /**
715       * @ast method 
716       * @aspect CodeGenerationConversions
717       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:996
718       */
719      void charToThis(CodeGeneration gen) { throw new Error("charToThis not implemented for " + getClass().getName()); }
720      /**
721       * @ast method 
722       * @aspect CodeGenerationConversions
723       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1004
724       */
725      void shortToThis(CodeGeneration gen) { throw new Error("shortToThis not implemented for " + getClass().getName()); }
726      /**
727       * @ast method 
728       * @aspect CodeGenerationBinaryOperations
729       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1037
730       */
731      void neg(CodeGeneration gen) { error(); }
732      /**
733       * @ast method 
734       * @aspect CodeGenerationBinaryOperations
735       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1043
736       */
737      void bitNot(CodeGeneration gen) { error(); }
738      /**
739       * @ast method 
740       * @aspect CodeGenerationBinaryOperations
741       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1047
742       */
743      void logNot(CodeGeneration gen) { error();}
744      /**
745       * @ast method 
746       * @aspect CodeGenerationBinaryOperations
747       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1050
748       */
749      void add(CodeGeneration gen) {error();}
750      /**
751       * @ast method 
752       * @aspect CodeGenerationBinaryOperations
753       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1056
754       */
755      void sub(CodeGeneration gen) {error();}
756      /**
757       * @ast method 
758       * @aspect CodeGenerationBinaryOperations
759       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1062
760       */
761      void mul(CodeGeneration gen) {error();}
762      /**
763       * @ast method 
764       * @aspect CodeGenerationBinaryOperations
765       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1068
766       */
767      void div(CodeGeneration gen) {error();}
768      /**
769       * @ast method 
770       * @aspect CodeGenerationBinaryOperations
771       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1074
772       */
773      void rem(CodeGeneration gen) {error();}
774      /**
775       * @ast method 
776       * @aspect CodeGenerationBinaryOperations
777       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1080
778       */
779      void shl(CodeGeneration gen) {error();}
780      /**
781       * @ast method 
782       * @aspect CodeGenerationBinaryOperations
783       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1084
784       */
785      void shr(CodeGeneration gen) {error();}
786      /**
787       * @ast method 
788       * @aspect CodeGenerationBinaryOperations
789       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1088
790       */
791      void ushr(CodeGeneration gen) {error();}
792      /**
793       * @ast method 
794       * @aspect CodeGenerationBinaryOperations
795       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1092
796       */
797      void bitand(CodeGeneration gen) {error();}
798      /**
799       * @ast method 
800       * @aspect CodeGenerationBinaryOperations
801       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1097
802       */
803      void bitor(CodeGeneration gen) {error();}
804      /**
805       * @ast method 
806       * @aspect CodeGenerationBinaryOperations
807       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1102
808       */
809      void bitxor(CodeGeneration gen) {error();}
810      /**
811       * @ast method 
812       * @aspect CodeGenerationBranch
813       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1109
814       */
815      public void branchLT(CodeGeneration gen, int label) { throw new Error("branchLT not supported for " + getClass().getName()); }
816      /**
817       * @ast method 
818       * @aspect CodeGenerationBranch
819       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1115
820       */
821      public void branchLE(CodeGeneration gen, int label) { throw new Error("branchLE not supported for " + getClass().getName()); }
822      /**
823       * @ast method 
824       * @aspect CodeGenerationBranch
825       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1121
826       */
827      public void branchGE(CodeGeneration gen, int label) { throw new Error("branchGE not supported for " + getClass().getName()); }
828      /**
829       * @ast method 
830       * @aspect CodeGenerationBranch
831       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1127
832       */
833      public void branchGT(CodeGeneration gen, int label) { throw new Error("branchGT not supported for " + getClass().getName()); }
834      /**
835       * @ast method 
836       * @aspect CodeGenerationBranch
837       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1133
838       */
839      public void branchEQ(CodeGeneration gen, int label) { throw new Error("branchEQ not supported for " + getClass().getName()); }
840      /**
841       * @ast method 
842       * @aspect CodeGenerationBranch
843       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1142
844       */
845      public void branchNE(CodeGeneration gen, int label) { throw new Error("branchNE not supported for " + getClass().getName()); }
846      /**
847       * @ast method 
848       * @aspect CreateBCode
849       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:53
850       */
851      private void generateBytecodes(CodeGeneration gen) {
852        for(int i = 0; i < getNumBodyDecl(); i++) {
853          BodyDecl b = getBodyDecl(i);
854          if(b instanceof FieldDeclaration && b.isBytecodeField() && b.generate()) {
855            FieldDeclaration f = (FieldDeclaration)b;
856            if(f.isStatic() && f.hasInit()) {
857              f.getInit().createBCode(gen);
858              f.getInit().type().emitAssignConvTo(gen, f.type()); // AssignConversion
859              f.emitStoreField(gen, this);
860            }
861          }
862          else if(b instanceof StaticInitializer) {
863            b.createBCode(gen);
864          }
865        }
866        gen.emitReturn();
867      }
868      /**
869       * @ast method 
870       * @aspect Flags
871       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Flags.jrag:28
872       */
873      public int mangledFlags(int flags) {
874        boolean privateFlag = (flags & Modifiers.ACC_PRIVATE) != 0;
875        boolean protectedFlag = (flags & Modifiers.ACC_PROTECTED) != 0;
876        flags &= ~ Modifiers.ACC_PRIVATE;
877        flags &= ~ Modifiers.ACC_PROTECTED;
878        if(protectedFlag)
879          flags |= Modifiers.ACC_PUBLIC;
880        return flags;
881      }
882      /**
883       * @ast method 
884       * @aspect GenerateClassfile
885       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:27
886       */
887      public void generateClassfile() {
888        for(Iterator iter = nestedTypes().iterator(); iter.hasNext(); ) {
889          TypeDecl typeDecl = (TypeDecl)iter.next();
890          typeDecl.generateClassfile();
891        }
892      }
893      /**
894       * @ast method 
895       * @aspect GenerateClassfile
896       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:335
897       */
898      public boolean clear() {
899        bytecodes(constantPool()).clearCodeGeneration();
900        for(int i = 0; i < getNumBodyDecl(); i++)
901          getBodyDecl(i).clear();
902        attributes_computed = false;
903        attributes_value = null;
904        clinit_attributes_computed = false;
905        clinit_attributes_value = null;
906        constantPool_computed = false;
907        constantPool_value = null;
908        bytecodes_ConstantPool_values = null;
909        return false;
910      }
911      /**
912       * @ast method 
913       * @aspect InnerClasses
914       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:12
915       */
916      public boolean hasField(String name) {
917        if(!memberFields(name).isEmpty())
918          return true;
919        for(int i = 0; i < getNumBodyDecl(); i++) {
920          if(getBodyDecl(i) instanceof FieldDeclaration) {
921            FieldDeclaration decl = (FieldDeclaration)getBodyDecl(i);
922            if(decl.name().equals(name))
923              return true;
924          }
925        }
926        return false;
927      }
928      /**
929       * @ast method 
930       * @aspect InnerClasses
931       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:36
932       */
933      public boolean hasMethod(String id) {
934        if(!memberMethods(id).isEmpty()) return true;
935        for(int i = 0; i < getNumBodyDecl(); i++) {
936          if(getBodyDecl(i) instanceof MethodDecl) {
937            MethodDecl decl = (MethodDecl)getBodyDecl(i);
938            if(decl.name().equals(id))
939              return true;
940          }
941        }
942        return false;
943      }
944      /**
945       * @ast method 
946       * @aspect InnerClasses
947       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:124
948       */
949      
950    
951      // The set of TypeDecls that has this TypeDecl as their directly enclosing TypeDecl.
952      // I.e., NestedTypes, InnerTypes, AnonymousClasses, LocalClasses.
953      private Collection nestedTypes;
954      /**
955       * @ast method 
956       * @aspect InnerClasses
957       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:125
958       */
959      public Collection nestedTypes() {
960        return nestedTypes != null ? nestedTypes : new HashSet();
961      }
962      /**
963       * @ast method 
964       * @aspect InnerClasses
965       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:128
966       */
967      public void addNestedType(TypeDecl typeDecl) {
968        if(nestedTypes == null) nestedTypes = new HashSet();
969        if(typeDecl != this)
970          nestedTypes.add(typeDecl);
971      }
972      /**
973       * @ast method 
974       * @aspect InnerClasses
975       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:135
976       */
977      
978    
979      // The set of nested TypeDecls that are accessed in this TypeDecl
980      private Collection usedNestedTypes;
981      /**
982       * @ast method 
983       * @aspect InnerClasses
984       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:136
985       */
986      public Collection usedNestedTypes() {
987        return usedNestedTypes != null ? usedNestedTypes : new HashSet();
988      }
989      /**
990       * @ast method 
991       * @aspect InnerClasses
992       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:139
993       */
994      public void addUsedNestedType(TypeDecl typeDecl) {
995        if(usedNestedTypes == null) usedNestedTypes = new HashSet();
996        usedNestedTypes.add(typeDecl);
997      }
998      /**
999       * @ast method 
1000       * @aspect InnerClasses
1001       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:170
1002       */
1003      
1004    
1005    
1006      public int accessorCounter = 0;
1007      /**
1008       * @ast method 
1009       * @aspect InnerClasses
1010       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:172
1011       */
1012      
1013    
1014      private HashMap accessorMap = null;
1015      /**
1016       * @ast method 
1017       * @aspect InnerClasses
1018       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:173
1019       */
1020      public ASTNode getAccessor(ASTNode source, String name) {
1021        ArrayList key = new ArrayList(2);
1022        key.add(source);
1023        key.add(name);
1024        if(accessorMap == null || !accessorMap.containsKey(key)) return null;
1025        return (ASTNode)accessorMap.get(key);
1026      }
1027      /**
1028       * @ast method 
1029       * @aspect InnerClasses
1030       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:181
1031       */
1032      public void addAccessor(ASTNode source, String name, ASTNode accessor) {
1033        ArrayList key = new ArrayList(2);
1034        key.add(source);
1035        key.add(name);
1036        if(accessorMap == null) accessorMap = new HashMap();
1037        accessorMap.put(key, accessor);
1038      }
1039      /**
1040       * @ast method 
1041       * @aspect InnerClasses
1042       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:189
1043       */
1044      public ASTNode getAccessorSource(ASTNode accessor) {
1045        Iterator i = accessorMap.entrySet().iterator();
1046        while (i.hasNext()) {
1047          Map.Entry entry = (Map.Entry) i.next();
1048          if (entry.getValue() == accessor)
1049            return (ASTNode) ((ArrayList) entry.getKey()).get(0);
1050        }
1051        return null;
1052      }
1053      /**
1054       * @ast method 
1055       * @aspect InnerClasses
1056       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:442
1057       */
1058      
1059    
1060    
1061    
1062      // add val$name as fields to the class
1063      private boolean addEnclosingVariables = true;
1064      /**
1065       * @ast method 
1066       * @aspect InnerClasses
1067       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:443
1068       */
1069      public void addEnclosingVariables() {
1070        if(!addEnclosingVariables) return;
1071        addEnclosingVariables = false;
1072        for(Iterator iter = enclosingVariables().iterator(); iter.hasNext(); ) {
1073          Variable v = (Variable)iter.next();
1074          Modifiers m = new Modifiers();
1075          m.addModifier(new Modifier("public"));
1076          m.addModifier(new Modifier("synthetic"));
1077          m.addModifier(new Modifier("final"));
1078          addMemberField(new FieldDeclaration(m, v.type().createQualifiedAccess(), "val$" + v.name(), new Opt()));
1079        }
1080      }
1081      /**
1082       * @ast method 
1083       * @aspect Java2Rewrites
1084       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:11
1085       */
1086      
1087      int uniqueIndexCounter = 1;
1088      /**
1089       * @ast method 
1090       * @aspect Java2Rewrites
1091       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:65
1092       */
1093      
1094      
1095    
1096      // lazily build a static field for assertionsDisabled 
1097      private FieldDeclaration createAssertionsDisabled = null;
1098      /**
1099       * @ast method 
1100       * @aspect Java2Rewrites
1101       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:66
1102       */
1103      public FieldDeclaration createAssertionsDisabled() {
1104        if(createAssertionsDisabled != null)
1105          return createAssertionsDisabled;
1106        // static final boolean $assertionsDisabled = !TypeName.class.desiredAssertionStatus();
1107        createAssertionsDisabled = new FieldDeclaration(
1108          new Modifiers(new List().add(new Modifier("public")).add(new Modifier("static")).add(new Modifier("final"))),
1109          new PrimitiveTypeAccess("boolean"),
1110          "$assertionsDisabled",
1111          new Opt(
1112              new LogNotExpr(
1113                topLevelType().createQualifiedAccess().qualifiesAccess(
1114                  new ClassAccess().qualifiesAccess(
1115                    new MethodAccess(
1116                      "desiredAssertionStatus",
1117                      new List()
1118                    )
1119                  )
1120                )
1121              )
1122          )
1123        );
1124        getBodyDeclList().insertChild(createAssertionsDisabled, 0);
1125        // explicit read to trigger possible rewrites
1126        createAssertionsDisabled = (FieldDeclaration)getBodyDeclList().getChild(0);
1127        // transform the generated initalization, e.g., the ClassAccess construct
1128        createAssertionsDisabled.transformation();
1129        return createAssertionsDisabled;
1130      }
1131      /**
1132       * @ast method 
1133       * @aspect Java2Rewrites
1134       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:119
1135       */
1136      
1137    
1138      // lazily build a static field for each typename used in a .class expression
1139      private HashMap createStaticClassField = null;
1140      /**
1141       * @ast method 
1142       * @aspect Java2Rewrites
1143       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:120
1144       */
1145      public FieldDeclaration createStaticClassField(String name) {
1146        if(createStaticClassField == null)
1147          createStaticClassField = new HashMap();
1148        if(createStaticClassField.containsKey(name))
1149          return (FieldDeclaration)createStaticClassField.get(name);
1150        // static synthetic Class class$java$lang$String;
1151        FieldDeclaration f = new FieldDeclaration(
1152          new Modifiers(new List().add(new Modifier("public")).add(new Modifier("static"))),
1153          lookupType("java.lang", "Class").createQualifiedAccess(),
1154          name,
1155          new Opt()
1156        ) {
1157          public boolean isConstant() {
1158            return true;
1159          }
1160        };
1161        createStaticClassField.put(name, f);
1162        return addMemberField(f);
1163      }
1164      /**
1165       * @ast method 
1166       * @aspect Java2Rewrites
1167       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:141
1168       */
1169      
1170    
1171      // lazily build a static class$ method in this type declaration
1172      private MethodDecl createStaticClassMethod = null;
1173      /**
1174       * @ast method 
1175       * @aspect Java2Rewrites
1176       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:142
1177       */
1178      public MethodDecl createStaticClassMethod() {
1179        if(createStaticClassMethod != null)
1180          return createStaticClassMethod;
1181        // static synthetic Class class$(String name) {
1182        //   try {
1183        //     return java.lang.Class.forName(name);
1184        //   } catch(java.lang.ClassNotFoundException e) {
1185        //     throw new java.lang.NoClassDefFoundError(e.getMessage());
1186        //   }
1187        // }
1188        createStaticClassMethod = new MethodDecl(
1189          new Modifiers(new List().add(new Modifier("public")).add(new Modifier("static"))),
1190          lookupType("java.lang", "Class").createQualifiedAccess(),
1191          "class$",
1192          new List().add(
1193            new ParameterDeclaration(
1194              new Modifiers(new List()),
1195              lookupType("java.lang", "String").createQualifiedAccess(),
1196              "name"
1197            )
1198          ),
1199          new List(),
1200          new Opt(
1201            new Block(
1202              new List().add(
1203                new TryStmt(
1204                  new Block(
1205                    new List().add(
1206                      new ReturnStmt(
1207                        new Opt(
1208                          lookupType("java.lang", "Class").createQualifiedAccess().qualifiesAccess(
1209                            new MethodAccess(
1210                              "forName",
1211                              new List().add(
1212                                new VarAccess("name")
1213                              )
1214                            )
1215                          )
1216                        )
1217                      )
1218                    )
1219                  ),
1220                  new List().add(
1221                    new BasicCatch(
1222                      new ParameterDeclaration(
1223                        new Modifiers(new List()),
1224                        lookupType("java.lang", "ClassNotFoundException").createQualifiedAccess(),
1225                        "e"
1226                      ),
1227                      new Block(
1228                        new List().add(
1229                          new ThrowStmt(
1230                            new ClassInstanceExpr(
1231                              lookupType("java.lang", "NoClassDefFoundError").createQualifiedAccess(),
1232                              new List().add(
1233                                new VarAccess("e").qualifiesAccess(
1234                                  new MethodAccess(
1235                                    "getMessage",
1236                                    new List()
1237                                  )
1238                                )
1239                              ),
1240                              new Opt()
1241                            )
1242                          )
1243                        )
1244                      )
1245                    )
1246                  ),
1247                  new Opt()
1248                )
1249              )
1250            )
1251          )
1252        ) {
1253          public boolean isConstant() {
1254            return true;
1255          }
1256        };
1257        return addMemberMethod(createStaticClassMethod);
1258      }
1259      /**
1260       * @ast method 
1261       * @aspect Transformations
1262       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Transformations.jrag:27
1263       */
1264      public void transformation() {
1265        addEnclosingVariables();
1266        super.transformation();
1267        if(isNestedType())
1268          enclosingType().addNestedType(this);
1269      }
1270      /**
1271       * @ast method 
1272       * @aspect Generics
1273       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:184
1274       */
1275      public TypeDecl makeGeneric(Signatures.ClassSignature s) {
1276        return this;
1277      }
1278      /**
1279       * @ast method 
1280       * @aspect LookupParTypeDecl
1281       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:835
1282       */
1283      public TypeDecl substitute(TypeVariable typeVariable) {
1284        if(isTopLevelType())
1285          return typeVariable;
1286        return enclosingType().substitute(typeVariable);
1287      }
1288      /**
1289       * @ast method 
1290       * @aspect LookupParTypeDecl
1291       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:873
1292       */
1293      public Access substitute(Parameterization parTypeDecl) {
1294        if(parTypeDecl instanceof ParTypeDecl && ((ParTypeDecl)parTypeDecl).genericDecl() == this)
1295               return ((TypeDecl)parTypeDecl).createBoundAccess();
1296       if(isTopLevelType())
1297               return createBoundAccess();
1298       return enclosingType().substitute(parTypeDecl).qualifiesAccess(new TypeAccess(name()));
1299      }
1300      /**
1301       * @ast method 
1302       * @aspect LookupParTypeDecl
1303       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:913
1304       */
1305      public Access substituteReturnType(Parameterization parTypeDecl) {
1306        return substitute(parTypeDecl);
1307      }
1308      /**
1309       * @ast method 
1310       * @aspect LookupParTypeDecl
1311       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:957
1312       */
1313      public Access substituteParameterType(Parameterization parTypeDecl) {
1314        return substitute(parTypeDecl);
1315      }
1316      /**
1317       * Add an annotation parameter constant to the constant pool.
1318       * @see AST.TypeDecl#addConstant(ConstantPool, Constant) TypeDecl.addConstant(ConstantPool, Constant)
1319       * @ast method 
1320       * @aspect AnnotationsCodegen
1321       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AnnotationsCodegen.jrag:172
1322       */
1323      public int addAnnotConstant(ConstantPool p, Constant c)     { 
1324        if(isString())
1325          return p.addUtf8(c.stringValue());
1326        throw new Error("Not supported"); 
1327      }
1328      /**
1329       * @ast method 
1330       * @aspect AutoBoxingCodegen
1331       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AutoBoxingCodegen.jrag:79
1332       */
1333      protected void emitBoxingOperation(CodeGeneration gen) {
1334        // Box the value on the stack into this Reference type
1335        String classname = constantPoolName();
1336        String desc = "(" + unboxed().typeDescriptor() + ")" + typeDescriptor();
1337        String name = "valueOf";
1338        int index = gen.constantPool().addMethodref(classname, name, desc);
1339        gen.emit(Bytecode.INVOKESTATIC, variableSize() - unboxed().variableSize()).add2(index);
1340      }
1341      /**
1342       * @ast method 
1343       * @aspect AutoBoxingCodegen
1344       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AutoBoxingCodegen.jrag:97
1345       */
1346      protected void emitUnboxingOperation(CodeGeneration gen) {
1347        // Unbox the value on the stack from this Reference type
1348        String classname = constantPoolName();
1349        String desc = "(" + ")" + unboxed().typeDescriptor();
1350        String name = unboxed().name() + "Value";
1351        int index = gen.constantPool().addMethodref(classname, name, desc);
1352        gen.emit(Bytecode.INVOKEVIRTUAL, unboxed().variableSize() - 1).add2(index);
1353      }
1354      /**
1355       * @ast method 
1356       * @aspect EnumsCodegen
1357       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/EnumsCodegen.jrag:85
1358       */
1359      
1360      // compute index of enum constants
1361      private HashMap createEnumIndexMap = null;
1362      /**
1363       * @ast method 
1364       * 
1365       */
1366      public TypeDecl() {
1367        super();
1368    
1369    
1370      }
1371      /**
1372       * Initializes the child array to the correct size.
1373       * Initializes List and Opt nta children.
1374       * @apilevel internal
1375       * @ast method
1376       * @ast method 
1377       * 
1378       */
1379      public void init$Children() {
1380        children = new ASTNode[2];
1381        setChild(new List(), 1);
1382      }
1383      /**
1384       * @ast method 
1385       * 
1386       */
1387      public TypeDecl(Modifiers p0, String p1, List<BodyDecl> p2) {
1388        setChild(p0, 0);
1389        setID(p1);
1390        setChild(p2, 1);
1391      }
1392      /**
1393       * @ast method 
1394       * 
1395       */
1396      public TypeDecl(Modifiers p0, beaver.Symbol p1, List<BodyDecl> p2) {
1397        setChild(p0, 0);
1398        setID(p1);
1399        setChild(p2, 1);
1400      }
1401      /**
1402       * @apilevel low-level
1403       * @ast method 
1404       * 
1405       */
1406      protected int numChildren() {
1407        return 2;
1408      }
1409      /**
1410       * @apilevel internal
1411       * @ast method 
1412       * 
1413       */
1414      public boolean mayHaveRewrite() {
1415        return false;
1416      }
1417      /**
1418       * Replaces the Modifiers child.
1419       * @param node The new node to replace the Modifiers child.
1420       * @apilevel high-level
1421       * @ast method 
1422       * 
1423       */
1424      public void setModifiers(Modifiers node) {
1425        setChild(node, 0);
1426      }
1427      /**
1428       * Retrieves the Modifiers child.
1429       * @return The current node used as the Modifiers child.
1430       * @apilevel high-level
1431       * @ast method 
1432       * 
1433       */
1434      public Modifiers getModifiers() {
1435        return (Modifiers)getChild(0);
1436      }
1437      /**
1438       * Retrieves the Modifiers child.
1439       * <p><em>This method does not invoke AST transformations.</em></p>
1440       * @return The current node used as the Modifiers child.
1441       * @apilevel low-level
1442       * @ast method 
1443       * 
1444       */
1445      public Modifiers getModifiersNoTransform() {
1446        return (Modifiers)getChildNoTransform(0);
1447      }
1448      /**
1449       * Replaces the lexeme ID.
1450       * @param value The new value for the lexeme ID.
1451       * @apilevel high-level
1452       * @ast method 
1453       * 
1454       */
1455      public void setID(String value) {
1456        tokenString_ID = value;
1457      }
1458      /**
1459       * @apilevel internal
1460       * @ast method 
1461       * 
1462       */
1463      
1464      /**
1465       * @apilevel internal
1466       */
1467      protected String tokenString_ID;
1468      /**
1469       * @ast method 
1470       * 
1471       */
1472      
1473      public int IDstart;
1474      /**
1475       * @ast method 
1476       * 
1477       */
1478      
1479      public int IDend;
1480      /**
1481       * JastAdd-internal setter for lexeme ID using the Beaver parser.
1482       * @apilevel internal
1483       * @ast method 
1484       * 
1485       */
1486      public void setID(beaver.Symbol symbol) {
1487        if(symbol.value != null && !(symbol.value instanceof String))
1488          throw new UnsupportedOperationException("setID is only valid for String lexemes");
1489        tokenString_ID = (String)symbol.value;
1490        IDstart = symbol.getStart();
1491        IDend = symbol.getEnd();
1492      }
1493      /**
1494       * Retrieves the value for the lexeme ID.
1495       * @return The value for the lexeme ID.
1496       * @apilevel high-level
1497       * @ast method 
1498       * 
1499       */
1500      public String getID() {
1501        return tokenString_ID != null ? tokenString_ID : "";
1502      }
1503      /**
1504       * Replaces the BodyDecl list.
1505       * @param list The new list node to be used as the BodyDecl list.
1506       * @apilevel high-level
1507       * @ast method 
1508       * 
1509       */
1510      public void setBodyDeclList(List<BodyDecl> list) {
1511        setChild(list, 1);
1512      }
1513      /**
1514       * Retrieves the number of children in the BodyDecl list.
1515       * @return Number of children in the BodyDecl list.
1516       * @apilevel high-level
1517       * @ast method 
1518       * 
1519       */
1520      public int getNumBodyDecl() {
1521        return getBodyDeclList().getNumChild();
1522      }
1523      /**
1524       * Retrieves the number of children in the BodyDecl list.
1525       * Calling this method will not trigger rewrites..
1526       * @return Number of children in the BodyDecl list.
1527       * @apilevel low-level
1528       * @ast method 
1529       * 
1530       */
1531      public int getNumBodyDeclNoTransform() {
1532        return getBodyDeclListNoTransform().getNumChildNoTransform();
1533      }
1534      /**
1535       * Retrieves the element at index {@code i} in the BodyDecl list..
1536       * @param i Index of the element to return.
1537       * @return The element at position {@code i} in the BodyDecl list.
1538       * @apilevel high-level
1539       * @ast method 
1540       * 
1541       */
1542      @SuppressWarnings({"unchecked", "cast"})
1543      public BodyDecl getBodyDecl(int i) {
1544        return (BodyDecl)getBodyDeclList().getChild(i);
1545      }
1546      /**
1547       * Append an element to the BodyDecl list.
1548       * @param node The element to append to the BodyDecl list.
1549       * @apilevel high-level
1550       * @ast method 
1551       * 
1552       */
1553      public void addBodyDecl(BodyDecl node) {
1554        List<BodyDecl> list = (parent == null || state == null) ? getBodyDeclListNoTransform() : getBodyDeclList();
1555        list.addChild(node);
1556      }
1557      /**
1558       * @apilevel low-level
1559       * @ast method 
1560       * 
1561       */
1562      public void addBodyDeclNoTransform(BodyDecl node) {
1563        List<BodyDecl> list = getBodyDeclListNoTransform();
1564        list.addChild(node);
1565      }
1566      /**
1567       * Replaces the BodyDecl list element at index {@code i} with the new node {@code node}.
1568       * @param node The new node to replace the old list element.
1569       * @param i The list index of the node to be replaced.
1570       * @apilevel high-level
1571       * @ast method 
1572       * 
1573       */
1574      public void setBodyDecl(BodyDecl node, int i) {
1575        List<BodyDecl> list = getBodyDeclList();
1576        list.setChild(node, i);
1577      }
1578      /**
1579       * Retrieves the BodyDecl list.
1580       * @return The node representing the BodyDecl list.
1581       * @apilevel high-level
1582       * @ast method 
1583       * 
1584       */
1585      public List<BodyDecl> getBodyDecls() {
1586        return getBodyDeclList();
1587      }
1588      /**
1589       * Retrieves the BodyDecl list.
1590       * <p><em>This method does not invoke AST transformations.</em></p>
1591       * @return The node representing the BodyDecl list.
1592       * @apilevel low-level
1593       * @ast method 
1594       * 
1595       */
1596      public List<BodyDecl> getBodyDeclsNoTransform() {
1597        return getBodyDeclListNoTransform();
1598      }
1599      /**
1600       * Retrieves the BodyDecl list.
1601       * @return The node representing the BodyDecl list.
1602       * @apilevel high-level
1603       * @ast method 
1604       * 
1605       */
1606      @SuppressWarnings({"unchecked", "cast"})
1607      public List<BodyDecl> getBodyDeclList() {
1608        List<BodyDecl> list = (List<BodyDecl>)getChild(1);
1609        list.getNumChild();
1610        return list;
1611      }
1612      /**
1613       * Retrieves the BodyDecl list.
1614       * <p><em>This method does not invoke AST transformations.</em></p>
1615       * @return The node representing the BodyDecl list.
1616       * @apilevel low-level
1617       * @ast method 
1618       * 
1619       */
1620      @SuppressWarnings({"unchecked", "cast"})
1621      public List<BodyDecl> getBodyDeclListNoTransform() {
1622        return (List<BodyDecl>)getChildNoTransform(1);
1623      }
1624      /**
1625       * @ast method 
1626       * @aspect GenericsTypeCheck
1627       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:359
1628       */
1629        public void typeCheck() {
1630        refined_TypeHierarchyCheck_TypeDecl_typeCheck();
1631        ArrayList list = new ArrayList();
1632        list.addAll(implementedInterfaces());
1633        for(int i = 0; i < list.size(); i++) {
1634          InterfaceDecl decl = (InterfaceDecl)list.get(i);
1635          if(decl instanceof ParInterfaceDecl) {
1636            ParInterfaceDecl p = (ParInterfaceDecl)decl;
1637            for(Iterator i2 = list.listIterator(i); i2.hasNext(); ) {
1638              InterfaceDecl decl2 = (InterfaceDecl)i2.next();
1639              if(decl2 instanceof ParInterfaceDecl) {
1640                ParInterfaceDecl q = (ParInterfaceDecl)decl2;
1641                if(p != q && p.genericDecl() == q.genericDecl() && !p.sameArgument(q))
1642                  error(p.genericDecl().name() + " cannot be inherited with different arguments: " +
1643                    p.typeName() + " and " + q.typeName());
1644              }
1645            }
1646          }
1647        }
1648      }
1649      /**
1650       * @ast method 
1651       * @aspect AutoBoxingCodegen
1652       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AutoBoxingCodegen.jrag:289
1653       */
1654        void emitAssignConvTo(CodeGeneration gen, TypeDecl type) {
1655        if(!type.isIntegralType() || !isIntegralType() || type.isLong() || type.isReferenceType() || isReferenceType())
1656          emitCastTo(gen, type);
1657      }
1658      /**
1659       * @ast method 
1660       * @aspect TypeConversion
1661       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:59
1662       */
1663      private boolean refined_TypeConversion_TypeDecl_assignConversionTo_TypeDecl_Expr(TypeDecl type, Expr expr)
1664    {
1665        //System.out.println("@@@ " + fullName() + " assign conversion to " + type.fullName() + ", expr: " + expr);
1666        boolean sourceIsConstant = expr != null ? expr.isConstant() : false;
1667        //System.out.println("@@@ sourceIsConstant: " + sourceIsConstant);
1668        if(identityConversionTo(type) || wideningConversionTo(type))
1669          return true;
1670        //System.out.println("@@@ narrowing conversion needed");
1671        //System.out.println("@@@ value: " + expr.value());
1672        if(sourceIsConstant && (isInt() || isChar() || isShort() || isByte()) &&
1673            (type.isByte() || type.isShort() || type.isChar()) &&
1674            narrowingConversionTo(type) && expr.representableIn(type))
1675          return true;
1676        //System.out.println("@@@ false");
1677        return false;
1678      }
1679      /**
1680       * @ast method 
1681       * @aspect TypeConversion
1682       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:76
1683       */
1684      private boolean refined_TypeConversion_TypeDecl_methodInvocationConversionTo_TypeDecl(TypeDecl type)
1685    {
1686        return identityConversionTo(type) || wideningConversionTo(type);
1687      }
1688      /**
1689       * @ast method 
1690       * @aspect TypeConversion
1691       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:81
1692       */
1693      private boolean refined_TypeConversion_TypeDecl_castingConversionTo_TypeDecl(TypeDecl type)
1694    { return identityConversionTo(type) ||
1695        wideningConversionTo(type) || narrowingConversionTo(type); }
1696      /**
1697       * @ast method 
1698       * @aspect Attributes
1699       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Attributes.jrag:164
1700       */
1701      private Collection refined_Attributes_TypeDecl_attributes()
1702    {
1703        Collection c = new ArrayList();
1704        if(!innerClassesAttributeEntries().isEmpty())
1705          c.add(new InnerClassesAttribute(this));
1706        if(isSynthetic())
1707          c.add(new SyntheticAttribute(constantPool()));
1708        if(compilationUnit().fromSource()) {
1709          String relativeName = compilationUnit().relativeName();
1710          if(relativeName != null) {
1711            String splitToken = java.io.File.separator;
1712            if(splitToken.equals("\\"))
1713              splitToken = "\\\\";
1714            String[] strings = relativeName.split(splitToken);
1715            c.add(new SourceFileAttribute(constantPool(), strings[strings.length-1]));
1716          }
1717        }
1718        return c;
1719      }
1720      /**
1721       * @ast method 
1722       * @aspect AnnotationsCodegen
1723       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AnnotationsCodegen.jrag:11
1724       */
1725      private Collection refined_AnnotationsCodegen_TypeDecl_attributes()
1726    {
1727        Collection c = refined_Attributes_TypeDecl_attributes();
1728        getModifiers().addRuntimeVisibleAnnotationsAttribute(c);
1729        getModifiers().addRuntimeInvisibleAnnotationsAttribute(c);
1730        return c;
1731      }
1732      /**
1733       * @ast method 
1734       * @aspect GenericsCodegen
1735       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:310
1736       */
1737      private Collection refined_GenericsCodegen_TypeDecl_attributes()
1738    {
1739        Collection c = refined_AnnotationsCodegen_TypeDecl_attributes();
1740        if(needsSignatureAttribute())
1741          c.add(new SignatureAttribute(constantPool(), classSignature()));
1742        return c;
1743      }
1744      /**
1745       * @attribute syn
1746       * @aspect ConstantExpression
1747       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:160
1748       */
1749      public Constant cast(Constant c) {
1750        ASTNode$State state = state();
1751        try {
1752        throw new UnsupportedOperationException("ConstantExpression operation cast" +
1753          " not supported for type " + getClass().getName()); 
1754      }
1755        finally {
1756        }
1757      }
1758      /**
1759       * @attribute syn
1760       * @aspect ConstantExpression
1761       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:174
1762       */
1763      public Constant plus(Constant c) {
1764        ASTNode$State state = state();
1765        try {
1766        throw new UnsupportedOperationException("ConstantExpression operation plus" +
1767          " not supported for type " + getClass().getName()); 
1768      }
1769        finally {
1770        }
1771      }
1772      /**
1773       * @attribute syn
1774       * @aspect ConstantExpression
1775       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:183
1776       */
1777      public Constant minus(Constant c) {
1778        ASTNode$State state = state();
1779        try {
1780        throw new UnsupportedOperationException("ConstantExpression operation minus" +
1781          " not supported for type " + getClass().getName()); 
1782      }
1783        finally {
1784        }
1785      }
1786      /**
1787       * @attribute syn
1788       * @aspect ConstantExpression
1789       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:192
1790       */
1791      public Constant bitNot(Constant c) {
1792        ASTNode$State state = state();
1793        try {
1794        throw new UnsupportedOperationException("ConstantExpression operation bitNot" +
1795          " not supported for type " + getClass().getName()); 
1796      }
1797        finally {
1798        }
1799      }
1800      /**
1801       * @attribute syn
1802       * @aspect ConstantExpression
1803       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:199
1804       */
1805      public Constant mul(Constant c1, Constant c2) {
1806        ASTNode$State state = state();
1807        try {
1808        throw new UnsupportedOperationException("ConstantExpression operation mul" +
1809          " not supported for type " + getClass().getName()); 
1810      }
1811        finally {
1812        }
1813      }
1814      /**
1815       * @attribute syn
1816       * @aspect ConstantExpression
1817       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:208
1818       */
1819      public Constant div(Constant c1, Constant c2) {
1820        ASTNode$State state = state();
1821        try {
1822        throw new UnsupportedOperationException("ConstantExpression operation div" +
1823          " not supported for type " + getClass().getName()); 
1824      }
1825        finally {
1826        }
1827      }
1828      /**
1829       * @attribute syn
1830       * @aspect ConstantExpression
1831       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:217
1832       */
1833      public Constant mod(Constant c1, Constant c2) {
1834        ASTNode$State state = state();
1835        try {
1836        throw new UnsupportedOperationException("ConstantExpression operation mod" +
1837          " not supported for type " + getClass().getName()); 
1838      }
1839        finally {
1840        }
1841      }
1842      /**
1843       * @attribute syn
1844       * @aspect ConstantExpression
1845       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:226
1846       */
1847      public Constant add(Constant c1, Constant c2) {
1848        ASTNode$State state = state();
1849        try {
1850        throw new UnsupportedOperationException("ConstantExpression operation add" +
1851          " not supported for type " + getClass().getName()); 
1852      }
1853        finally {
1854        }
1855      }
1856      /**
1857       * @attribute syn
1858       * @aspect ConstantExpression
1859       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:236
1860       */
1861      public Constant sub(Constant c1, Constant c2) {
1862        ASTNode$State state = state();
1863        try {
1864        throw new UnsupportedOperationException("ConstantExpression operation sub" +
1865          " not supported for type " + getClass().getName()); 
1866      }
1867        finally {
1868        }
1869      }
1870      /**
1871       * @attribute syn
1872       * @aspect ConstantExpression
1873       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:245
1874       */
1875      public Constant lshift(Constant c1, Constant c2) {
1876        ASTNode$State state = state();
1877        try {
1878        throw new UnsupportedOperationException("ConstantExpression operation lshift" +
1879          " not supported for type " + getClass().getName()); 
1880      }
1881        finally {
1882        }
1883      }
1884      /**
1885       * @attribute syn
1886       * @aspect ConstantExpression
1887       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:252
1888       */
1889      public Constant rshift(Constant c1, Constant c2) {
1890        ASTNode$State state = state();
1891        try {
1892        throw new UnsupportedOperationException("ConstantExpression operation rshift" +
1893          " not supported for type " + getClass().getName()); 
1894      }
1895        finally {
1896        }
1897      }
1898      /**
1899       * @attribute syn
1900       * @aspect ConstantExpression
1901       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:259
1902       */
1903      public Constant urshift(Constant c1, Constant c2) {
1904        ASTNode$State state = state();
1905        try {
1906        throw new UnsupportedOperationException("ConstantExpression operation urshift" +
1907          " not supported for type " + getClass().getName()); 
1908      }
1909        finally {
1910        }
1911      }
1912      /**
1913       * @attribute syn
1914       * @aspect ConstantExpression
1915       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:266
1916       */
1917      public Constant andBitwise(Constant c1, Constant c2) {
1918        ASTNode$State state = state();
1919        try {
1920        throw new UnsupportedOperationException("ConstantExpression operation andBitwise" +
1921          " not supported for type " + getClass().getName()); 
1922      }
1923        finally {
1924        }
1925      }
1926      /**
1927       * @attribute syn
1928       * @aspect ConstantExpression
1929       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:274
1930       */
1931      public Constant xorBitwise(Constant c1, Constant c2) {
1932        ASTNode$State state = state();
1933        try {
1934        throw new UnsupportedOperationException("ConstantExpression operation xorBitwise" +
1935          " not supported for type " + getClass().getName()); 
1936      }
1937        finally {
1938        }
1939      }
1940      /**
1941       * @attribute syn
1942       * @aspect ConstantExpression
1943       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:282
1944       */
1945      public Constant orBitwise(Constant c1, Constant c2) {
1946        ASTNode$State state = state();
1947        try {
1948        throw new UnsupportedOperationException("ConstantExpression operation orBitwise" +
1949          " not supported for type " + getClass().getName()); 
1950      }
1951        finally {
1952        }
1953      }
1954      /**
1955       * @attribute syn
1956       * @aspect ConstantExpression
1957       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:290
1958       */
1959      public Constant questionColon(Constant cond, Constant c1, Constant c2) {
1960        ASTNode$State state = state();
1961        try {
1962        throw new UnsupportedOperationException("ConstantExpression operation questionColon" +
1963          " not supported for type " + getClass().getName()); 
1964      }
1965        finally {
1966        }
1967      }
1968      /**
1969       * @attribute syn
1970       * @aspect ConstantExpression
1971       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:394
1972       */
1973      public boolean eqIsTrue(Expr left, Expr right) {
1974        ASTNode$State state = state();
1975        try {
1976        System.err.println("Evaluation eqIsTrue for unknown type: " + getClass().getName());
1977        return false;
1978      }
1979        finally {
1980        }
1981      }
1982      /**
1983       * @attribute syn
1984       * @aspect ConstantExpression
1985       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:405
1986       */
1987      public boolean ltIsTrue(Expr left, Expr right) {
1988        ASTNode$State state = state();
1989        try {  return false;  }
1990        finally {
1991        }
1992      }
1993      /**
1994       * @attribute syn
1995       * @aspect ConstantExpression
1996       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:411
1997       */
1998      public boolean leIsTrue(Expr left, Expr right) {
1999        ASTNode$State state = state();
2000        try {  return false;  }
2001        finally {
2002        }
2003      }
2004      protected java.util.Map accessibleFromPackage_String_values;
2005      /**
2006       * @attribute syn
2007       * @aspect AccessControl
2008       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AccessControl.jrag:15
2009       */
2010      @SuppressWarnings({"unchecked", "cast"})
2011      public boolean accessibleFromPackage(String packageName) {
2012        Object _parameters = packageName;
2013        if(accessibleFromPackage_String_values == null) accessibleFromPackage_String_values = new java.util.HashMap(4);
2014        if(accessibleFromPackage_String_values.containsKey(_parameters)) {
2015          return ((Boolean)accessibleFromPackage_String_values.get(_parameters)).booleanValue();
2016        }
2017          ASTNode$State state = state();
2018      int num = state.boundariesCrossed;
2019      boolean isFinal = this.is$Final();
2020        boolean accessibleFromPackage_String_value = accessibleFromPackage_compute(packageName);
2021      if(isFinal && num == state().boundariesCrossed){ accessibleFromPackage_String_values.put(_parameters, Boolean.valueOf(accessibleFromPackage_String_value)); }
2022            return accessibleFromPackage_String_value;
2023      }
2024      /**
2025       * @apilevel internal
2026       */
2027      private boolean accessibleFromPackage_compute(String packageName) {  return !isPrivate() && (isPublic() || hostPackage().equals(packageName));  }
2028      protected java.util.Map accessibleFromExtend_TypeDecl_values;
2029      /**
2030       * @attribute syn
2031       * @aspect AccessControl
2032       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AccessControl.jrag:18
2033       */
2034      @SuppressWarnings({"unchecked", "cast"})
2035      public boolean accessibleFromExtend(TypeDecl type) {
2036        Object _parameters = type;
2037        if(accessibleFromExtend_TypeDecl_values == null) accessibleFromExtend_TypeDecl_values = new java.util.HashMap(4);
2038        if(accessibleFromExtend_TypeDecl_values.containsKey(_parameters)) {
2039          return ((Boolean)accessibleFromExtend_TypeDecl_values.get(_parameters)).booleanValue();
2040        }
2041          ASTNode$State state = state();
2042      int num = state.boundariesCrossed;
2043      boolean isFinal = this.is$Final();
2044        boolean accessibleFromExtend_TypeDecl_value = accessibleFromExtend_compute(type);
2045      if(isFinal && num == state().boundariesCrossed){ accessibleFromExtend_TypeDecl_values.put(_parameters, Boolean.valueOf(accessibleFromExtend_TypeDecl_value)); }
2046            return accessibleFromExtend_TypeDecl_value;
2047      }
2048      /**
2049       * @apilevel internal
2050       */
2051      private boolean accessibleFromExtend_compute(TypeDecl type) {
2052        if(type == this)
2053          return true;
2054        if(isInnerType()) { 
2055          if(!enclosingType().accessibleFrom(type)) {
2056            return false;
2057          }
2058        }
2059        if(isPublic()) 
2060          return true;
2061        else if(isProtected()) {
2062          // isProtected implies a nested type
2063          if(hostPackage().equals(type.hostPackage())) {
2064            return true;
2065          }
2066          if(type.isNestedType() && type.enclosingType().withinBodyThatSubclasses(enclosingType()) != null)
2067            return true;
2068          return false;
2069        }
2070        else if(isPrivate()) {
2071          return topLevelType() == type.topLevelType();
2072        }
2073        else
2074          return hostPackage().equals(type.hostPackage());
2075      }
2076      protected java.util.Map accessibleFrom_TypeDecl_values;
2077      /**
2078       * @attribute syn
2079       * @aspect AccessControl
2080       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AccessControl.jrag:44
2081       */
2082      @SuppressWarnings({"unchecked", "cast"})
2083      public boolean accessibleFrom(TypeDecl type) {
2084        Object _parameters = type;
2085        if(accessibleFrom_TypeDecl_values == null) accessibleFrom_TypeDecl_values = new java.util.HashMap(4);
2086        if(accessibleFrom_TypeDecl_values.containsKey(_parameters)) {
2087          return ((Boolean)accessibleFrom_TypeDecl_values.get(_parameters)).booleanValue();
2088        }
2089          ASTNode$State state = state();
2090      int num = state.boundariesCrossed;
2091      boolean isFinal = this.is$Final();
2092        boolean accessibleFrom_TypeDecl_value = accessibleFrom_compute(type);
2093      if(isFinal && num == state().boundariesCrossed){ accessibleFrom_TypeDecl_values.put(_parameters, Boolean.valueOf(accessibleFrom_TypeDecl_value)); }
2094            return accessibleFrom_TypeDecl_value;
2095      }
2096      /**
2097       * @apilevel internal
2098       */
2099      private boolean accessibleFrom_compute(TypeDecl type) {
2100        if(type == this)
2101          return true;
2102        if(isInnerType()) { 
2103          if(!enclosingType().accessibleFrom(type)) {
2104            return false;
2105          }
2106        }
2107        if(isPublic()) {  
2108          return true;
2109        }
2110        else if(isProtected()) {
2111          if(hostPackage().equals(type.hostPackage())) {
2112            return true;
2113          }
2114          if(isMemberType()) {
2115            TypeDecl typeDecl = type;
2116            while(typeDecl != null && !typeDecl.instanceOf(enclosingType()))
2117              typeDecl = typeDecl.enclosingType();
2118            if(typeDecl != null) {
2119              return true;
2120            }
2121          }
2122          return false;
2123        }
2124        else if(isPrivate()) {
2125          return topLevelType() == type.topLevelType();
2126        }
2127        else {
2128          return hostPackage().equals(type.hostPackage());
2129        }
2130      }
2131      /**
2132       * @apilevel internal
2133       */
2134      protected boolean dimension_computed = false;
2135      /**
2136       * @apilevel internal
2137       */
2138      protected int dimension_value;
2139      /**
2140       * @attribute syn
2141       * @aspect Arrays
2142       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Arrays.jrag:11
2143       */
2144      @SuppressWarnings({"unchecked", "cast"})
2145      public int dimension() {
2146        if(dimension_computed) {
2147          return dimension_value;
2148        }
2149          ASTNode$State state = state();
2150      int num = state.boundariesCrossed;
2151      boolean isFinal = this.is$Final();
2152        dimension_value = dimension_compute();
2153      if(isFinal && num == state().boundariesCrossed){ dimension_computed = true; }
2154            return dimension_value;
2155      }
2156      /**
2157       * @apilevel internal
2158       */
2159      private int dimension_compute() {  return 0;  }
2160      /**
2161       * @apilevel internal
2162       */
2163      protected boolean elementType_computed = false;
2164      /**
2165       * @apilevel internal
2166       */
2167      protected TypeDecl elementType_value;
2168      /**
2169       * @attribute syn
2170       * @aspect Arrays
2171       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Arrays.jrag:15
2172       */
2173      @SuppressWarnings({"unchecked", "cast"})
2174      public TypeDecl elementType() {
2175        if(elementType_computed) {
2176          return elementType_value;
2177        }
2178          ASTNode$State state = state();
2179      int num = state.boundariesCrossed;
2180      boolean isFinal = this.is$Final();
2181        elementType_value = elementType_compute();
2182      if(isFinal && num == state().boundariesCrossed){ elementType_computed = true; }
2183            return elementType_value;
2184      }
2185      /**
2186       * @apilevel internal
2187       */
2188      private TypeDecl elementType_compute() {  return this;  }
2189      /**
2190       * @apilevel internal
2191       */
2192      protected boolean arrayType_computed = false;
2193      /**
2194       * @apilevel internal
2195       */
2196      protected TypeDecl arrayType_value;
2197      /**
2198       * @attribute syn
2199       * @aspect GenericsArrays
2200       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsArrays.jrag:11
2201       */
2202      @SuppressWarnings({"unchecked", "cast"})
2203      public TypeDecl arrayType() {
2204        if(arrayType_computed) {
2205          return arrayType_value;
2206        }
2207          ASTNode$State state = state();
2208      int num = state.boundariesCrossed;
2209      boolean isFinal = this.is$Final();
2210        arrayType_value = arrayType_compute();
2211        arrayType_value.setParent(this);
2212        arrayType_value.is$Final = true;
2213      if(true){ arrayType_computed = true; }
2214            return arrayType_value;
2215      }
2216      /**
2217       * @apilevel internal
2218       */
2219      private TypeDecl arrayType_compute() {
2220        String name = name() + "[]";
2221    
2222        List body = new List();
2223        body.add(
2224          new FieldDeclaration(
2225            new Modifiers(new List().add(new Modifier("public")).add(new Modifier("final"))),
2226            new PrimitiveTypeAccess("int"),
2227            "length",
2228            new Opt() // [Init:Expr]
2229          )
2230        );
2231        MethodDecl clone = null;
2232        TypeDecl typeObject = typeObject();
2233        for(int i = 0; clone == null && i < typeObject.getNumBodyDecl(); i++) {
2234          if(typeObject.getBodyDecl(i) instanceof MethodDecl) {
2235            MethodDecl m = (MethodDecl)typeObject.getBodyDecl(i);
2236            if(m.name().equals("clone"))
2237              clone = m;
2238          }
2239        }
2240        if(clone != null) {
2241          body.add(
2242              // we create a substituted method that substitutes the clone method in object
2243              // this has the following two consequences: the return value will be cast to the
2244              // expected return type rather than object, and the invoked method will be the
2245              // method in object rather in the array
2246              new MethodDeclSubstituted(
2247                new Modifiers(new List().add(new Modifier("public"))),
2248                new ArrayTypeAccess(createQualifiedAccess()),
2249                "clone",
2250                new List(),
2251                new List(),
2252                new Opt(new Block()),
2253                (MethodDecl)typeObject().memberMethods("clone").iterator().next()
2254              )
2255          );
2256        }
2257        TypeDecl typeDecl =
2258          new ArrayDecl(
2259            new Modifiers(new List().add(new Modifier("public"))),
2260            name,
2261            new Opt(typeObject().createQualifiedAccess()), // [SuperClassAccess]
2262            new List().add(typeCloneable().createQualifiedAccess()).add(typeSerializable().createQualifiedAccess()), // Implements*
2263            body // BodyDecl*
2264          );
2265        return typeDecl;
2266      }
2267      /**
2268       * @attribute syn
2269       * @aspect DataStructures
2270       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:134
2271       */
2272      public int size() {
2273        ASTNode$State state = state();
2274        try {  return 1;  }
2275        finally {
2276        }
2277      }
2278      /**
2279       * @attribute syn
2280       * @aspect DataStructures
2281       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:135
2282       */
2283      public boolean isEmpty() {
2284        ASTNode$State state = state();
2285        try {  return false;  }
2286        finally {
2287        }
2288      }
2289      /**
2290       * @attribute syn
2291       * @aspect DataStructures
2292       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:139
2293       */
2294      public boolean contains(Object o) {
2295        ASTNode$State state = state();
2296        try {  return this == o;  }
2297        finally {
2298        }
2299      }
2300      /**
2301       * @apilevel internal
2302       */
2303      protected boolean isException_computed = false;
2304      /**
2305       * @apilevel internal
2306       */
2307      protected boolean isException_value;
2308      /**
2309       * @attribute syn
2310       * @aspect ExceptionHandling
2311       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:24
2312       */
2313      @SuppressWarnings({"unchecked", "cast"})
2314      public boolean isException() {
2315        if(isException_computed) {
2316          return isException_value;
2317        }
2318          ASTNode$State state = state();
2319      int num = state.boundariesCrossed;
2320      boolean isFinal = this.is$Final();
2321        isException_value = isException_compute();
2322      if(isFinal && num == state().boundariesCrossed){ isException_computed = true; }
2323            return isException_value;
2324      }
2325      /**
2326       * @apilevel internal
2327       */
2328      private boolean isException_compute() {  return instanceOf(typeException());  }
2329      /**
2330       * @apilevel internal
2331       */
2332      protected boolean isCheckedException_computed = false;
2333      /**
2334       * @apilevel internal
2335       */
2336      protected boolean isCheckedException_value;
2337      /**
2338       * Unfortunately the concept of checked vs. unchecked exceptions
2339       * has been inverted in JastAddJ compared to the Java specification.
2340       * This is a slightly unfortunate design flaw which we cannot change
2341       * at this time.
2342       * @attribute syn
2343       * @aspect ExceptionHandling
2344       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:32
2345       */
2346      @SuppressWarnings({"unchecked", "cast"})
2347      public boolean isCheckedException() {
2348        if(isCheckedException_computed) {
2349          return isCheckedException_value;
2350        }
2351          ASTNode$State state = state();
2352      int num = state.boundariesCrossed;
2353      boolean isFinal = this.is$Final();
2354        isCheckedException_value = isCheckedException_compute();
2355      if(isFinal && num == state().boundariesCrossed){ isCheckedException_computed = true; }
2356            return isCheckedException_value;
2357      }
2358      /**
2359       * @apilevel internal
2360       */
2361      private boolean isCheckedException_compute() {  return isException() &&
2362        (instanceOf(typeRuntimeException()) || instanceOf(typeError()));  }
2363      /**
2364       * @apilevel internal
2365       */
2366      protected boolean isUncheckedException_computed = false;
2367      /**
2368       * @apilevel internal
2369       */
2370      protected boolean isUncheckedException_value;
2371      /**
2372       * Unfortunately the concept of checked vs. unchecked exceptions
2373       * has been inverted in JastAddJ compared to the Java specification.
2374       * This is a slightly unfortunate design flaw which we cannot change
2375       * at this time.
2376       * @attribute syn
2377       * @aspect ExceptionHandling
2378       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:41
2379       */
2380      @SuppressWarnings({"unchecked", "cast"})
2381      public boolean isUncheckedException() {
2382        if(isUncheckedException_computed) {
2383          return isUncheckedException_value;
2384        }
2385          ASTNode$State state = state();
2386      int num = state.boundariesCrossed;
2387      boolean isFinal = this.is$Final();
2388        isUncheckedException_value = isUncheckedException_compute();
2389      if(isFinal && num == state().boundariesCrossed){ isUncheckedException_computed = true; }
2390            return isUncheckedException_value;
2391      }
2392      /**
2393       * @apilevel internal
2394       */
2395      private boolean isUncheckedException_compute() {  return isException() && !isCheckedException();  }
2396      protected java.util.Map mayCatch_TypeDecl_values;
2397      /**
2398       * @attribute syn
2399       * @aspect ExceptionHandling
2400       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:250
2401       */
2402      @SuppressWarnings({"unchecked", "cast"})
2403      public boolean mayCatch(TypeDecl thrownType) {
2404        Object _parameters = thrownType;
2405        if(mayCatch_TypeDecl_values == null) mayCatch_TypeDecl_values = new java.util.HashMap(4);
2406        if(mayCatch_TypeDecl_values.containsKey(_parameters)) {
2407          return ((Boolean)mayCatch_TypeDecl_values.get(_parameters)).booleanValue();
2408        }
2409          ASTNode$State state = state();
2410      int num = state.boundariesCrossed;
2411      boolean isFinal = this.is$Final();
2412        boolean mayCatch_TypeDecl_value = mayCatch_compute(thrownType);
2413      if(isFinal && num == state().boundariesCrossed){ mayCatch_TypeDecl_values.put(_parameters, Boolean.valueOf(mayCatch_TypeDecl_value)); }
2414            return mayCatch_TypeDecl_value;
2415      }
2416      /**
2417       * @apilevel internal
2418       */
2419      private boolean mayCatch_compute(TypeDecl thrownType) {  return thrownType.instanceOf(this) || this.instanceOf(thrownType);  }
2420      /**
2421       * @attribute syn
2422       * @aspect ConstructScope
2423       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:21
2424       */
2425      public Collection lookupSuperConstructor() {
2426        ASTNode$State state = state();
2427        try {  return Collections.EMPTY_LIST;  }
2428        finally {
2429        }
2430      }
2431      /**
2432       * @apilevel internal
2433       */
2434      protected boolean constructors_computed = false;
2435      /**
2436       * @apilevel internal
2437       */
2438      protected Collection constructors_value;
2439      /**
2440       * @attribute syn
2441       * @aspect ConstructorLookup
2442       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:98
2443       */
2444      @SuppressWarnings({"unchecked", "cast"})
2445      public Collection constructors() {
2446        if(constructors_computed) {
2447          return constructors_value;
2448        }
2449          ASTNode$State state = state();
2450      int num = state.boundariesCrossed;
2451      boolean isFinal = this.is$Final();
2452        constructors_value = constructors_compute();
2453      if(isFinal && num == state().boundariesCrossed){ constructors_computed = true; }
2454            return constructors_value;
2455      }
2456      /**
2457       * @apilevel internal
2458       */
2459      private Collection constructors_compute() {
2460        Collection c = new ArrayList();
2461        for(int i = 0; i < getNumBodyDecl(); i++) {
2462          if(getBodyDecl(i) instanceof ConstructorDecl) {
2463            c.add(getBodyDecl(i));
2464          }
2465        }
2466        return c;
2467      }
2468      protected java.util.Map unqualifiedLookupMethod_String_values;
2469      /**
2470       * @attribute syn
2471       * @aspect LookupMethod
2472       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:36
2473       */
2474      @SuppressWarnings({"unchecked", "cast"})
2475      public Collection unqualifiedLookupMethod(String name) {
2476        Object _parameters = name;
2477        if(unqualifiedLookupMethod_String_values == null) unqualifiedLookupMethod_String_values = new java.util.HashMap(4);
2478        if(unqualifiedLookupMethod_String_values.containsKey(_parameters)) {
2479          return (Collection)unqualifiedLookupMethod_String_values.get(_parameters);
2480        }
2481          ASTNode$State state = state();
2482      int num = state.boundariesCrossed;
2483      boolean isFinal = this.is$Final();
2484        Collection unqualifiedLookupMethod_String_value = unqualifiedLookupMethod_compute(name);
2485      if(isFinal && num == state().boundariesCrossed){ unqualifiedLookupMethod_String_values.put(_parameters, unqualifiedLookupMethod_String_value); }
2486            return unqualifiedLookupMethod_String_value;
2487      }
2488      /**
2489       * @apilevel internal
2490       */
2491      private Collection unqualifiedLookupMethod_compute(String name) {
2492        Collection c = memberMethods(name);
2493        if(!c.isEmpty()) return c;
2494        if(isInnerType())
2495          return lookupMethod(name);
2496        return removeInstanceMethods(lookupMethod(name));
2497      }
2498      /**
2499       * @attribute syn
2500       * @aspect MemberMethods
2501       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:210
2502       */
2503      public Collection memberMethods(String name) {
2504        ASTNode$State state = state();
2505        try {
2506        Collection c = (Collection)methodsNameMap().get(name);
2507        if(c != null) return c;
2508        return Collections.EMPTY_LIST;
2509      }
2510        finally {
2511        }
2512      }
2513      /**
2514       * @apilevel internal
2515       */
2516      protected boolean methodsNameMap_computed = false;
2517      /**
2518       * @apilevel internal
2519       */
2520      protected HashMap methodsNameMap_value;
2521      /**
2522       * @attribute syn
2523       * @aspect MemberMethods
2524       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:216
2525       */
2526      @SuppressWarnings({"unchecked", "cast"})
2527      public HashMap methodsNameMap() {
2528        if(methodsNameMap_computed) {
2529          return methodsNameMap_value;
2530        }
2531          ASTNode$State state = state();
2532      int num = state.boundariesCrossed;
2533      boolean isFinal = this.is$Final();
2534        methodsNameMap_value = methodsNameMap_compute();
2535      if(isFinal && num == state().boundariesCrossed){ methodsNameMap_computed = true; }
2536            return methodsNameMap_value;
2537      }
2538      /**
2539       * @apilevel internal
2540       */
2541      private HashMap methodsNameMap_compute() {
2542        HashMap map = new HashMap();
2543        for(Iterator iter = methodsIterator(); iter.hasNext(); ) {
2544          MethodDecl m = (MethodDecl)iter.next();
2545          ArrayList list = (ArrayList)map.get(m.name());
2546          if(list == null) {
2547            list = new ArrayList(4);
2548            map.put(m.name(), list);
2549          }
2550          list.add(m);
2551        }
2552        return map;
2553      }
2554      /**
2555       * @attribute syn
2556       * @aspect MemberMethods
2557       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:247
2558       */
2559      public SimpleSet localMethodsSignature(String signature) {
2560        ASTNode$State state = state();
2561        try {
2562        SimpleSet set = (SimpleSet)localMethodsSignatureMap().get(signature);
2563        if(set != null) return set;
2564        return SimpleSet.emptySet;
2565      }
2566        finally {
2567        }
2568      }
2569      /**
2570       * @apilevel internal
2571       */
2572      protected boolean localMethodsSignatureMap_computed = false;
2573      /**
2574       * @apilevel internal
2575       */
2576      protected HashMap localMethodsSignatureMap_value;
2577      /**
2578       * @attribute syn
2579       * @aspect MemberMethods
2580       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:253
2581       */
2582      @SuppressWarnings({"unchecked", "cast"})
2583      public HashMap localMethodsSignatureMap() {
2584        if(localMethodsSignatureMap_computed) {
2585          return localMethodsSignatureMap_value;
2586        }
2587          ASTNode$State state = state();
2588      int num = state.boundariesCrossed;
2589      boolean isFinal = this.is$Final();
2590        localMethodsSignatureMap_value = localMethodsSignatureMap_compute();
2591      if(isFinal && num == state().boundariesCrossed){ localMethodsSignatureMap_computed = true; }
2592            return localMethodsSignatureMap_value;
2593      }
2594      /**
2595       * @apilevel internal
2596       */
2597      private HashMap localMethodsSignatureMap_compute() {
2598        HashMap map = new HashMap(getNumBodyDecl());
2599        for(int i = 0; i < getNumBodyDecl(); i++) {
2600          if(getBodyDecl(i) instanceof MethodDecl) {
2601            MethodDecl decl = (MethodDecl)getBodyDecl(i);
2602            map.put(decl.signature(), decl);
2603          }
2604        }
2605        return map;
2606      }
2607      /**
2608       * @attribute syn
2609       * @aspect MemberMethods
2610       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:315
2611       */
2612      public SimpleSet methodsSignature(String signature) {
2613        ASTNode$State state = state();
2614        try {
2615        SimpleSet set = (SimpleSet)methodsSignatureMap().get(signature);
2616        if(set != null) return set;
2617        return SimpleSet.emptySet;
2618      }
2619        finally {
2620        }
2621      }
2622      /**
2623       * @apilevel internal
2624       */
2625      protected boolean methodsSignatureMap_computed = false;
2626      /**
2627       * @apilevel internal
2628       */
2629      protected HashMap methodsSignatureMap_value;
2630      /**
2631       * @attribute syn
2632       * @aspect MemberMethods
2633       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:321
2634       */
2635      @SuppressWarnings({"unchecked", "cast"})
2636      public HashMap methodsSignatureMap() {
2637        if(methodsSignatureMap_computed) {
2638          return methodsSignatureMap_value;
2639        }
2640          ASTNode$State state = state();
2641      int num = state.boundariesCrossed;
2642      boolean isFinal = this.is$Final();
2643        methodsSignatureMap_value = methodsSignatureMap_compute();
2644      if(isFinal && num == state().boundariesCrossed){ methodsSignatureMap_computed = true; }
2645            return methodsSignatureMap_value;
2646      }
2647      /**
2648       * @apilevel internal
2649       */
2650      private HashMap methodsSignatureMap_compute() {  return localMethodsSignatureMap();  }
2651      protected java.util.Map ancestorMethods_String_values;
2652      /**
2653       * @attribute syn
2654       * @aspect AncestorMethods
2655       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:378
2656       */
2657      @SuppressWarnings({"unchecked", "cast"})
2658      public SimpleSet ancestorMethods(String signature) {
2659        Object _parameters = signature;
2660        if(ancestorMethods_String_values == null) ancestorMethods_String_values = new java.util.HashMap(4);
2661        if(ancestorMethods_String_values.containsKey(_parameters)) {
2662          return (SimpleSet)ancestorMethods_String_values.get(_parameters);
2663        }
2664          ASTNode$State state = state();
2665      int num = state.boundariesCrossed;
2666      boolean isFinal = this.is$Final();
2667        SimpleSet ancestorMethods_String_value = ancestorMethods_compute(signature);
2668      if(isFinal && num == state().boundariesCrossed){ ancestorMethods_String_values.put(_parameters, ancestorMethods_String_value); }
2669            return ancestorMethods_String_value;
2670      }
2671      /**
2672       * @apilevel internal
2673       */
2674      private SimpleSet ancestorMethods_compute(String signature) {  return SimpleSet.emptySet;  }
2675      /**
2676       * @attribute syn
2677       * @aspect TypeScopePropagation
2678       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:478
2679       */
2680      public boolean hasType(String name) {
2681        ASTNode$State state = state();
2682        try {  return !memberTypes(name).isEmpty();  }
2683        finally {
2684        }
2685      }
2686      protected java.util.Map localTypeDecls_String_values;
2687      /**
2688       * @attribute syn
2689       * @aspect TypeScopePropagation
2690       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:489
2691       */
2692      @SuppressWarnings({"unchecked", "cast"})
2693      public SimpleSet localTypeDecls(String name) {
2694        Object _parameters = name;
2695        if(localTypeDecls_String_values == null) localTypeDecls_String_values = new java.util.HashMap(4);
2696        if(localTypeDecls_String_values.containsKey(_parameters)) {
2697          return (SimpleSet)localTypeDecls_String_values.get(_parameters);
2698        }
2699          ASTNode$State state = state();
2700      int num = state.boundariesCrossed;
2701      boolean isFinal = this.is$Final();
2702        SimpleSet localTypeDecls_String_value = localTypeDecls_compute(name);
2703      if(isFinal && num == state().boundariesCrossed){ localTypeDecls_String_values.put(_parameters, localTypeDecls_String_value); }
2704            return localTypeDecls_String_value;
2705      }
2706      /**
2707       * @apilevel internal
2708       */
2709      private SimpleSet localTypeDecls_compute(String name) {
2710        SimpleSet set = SimpleSet.emptySet;
2711        for(int i = 0; i < getNumBodyDecl(); i++)
2712          if(getBodyDecl(i).declaresType(name))
2713            set = set.add(getBodyDecl(i).type(name));
2714        return set;
2715      }
2716      protected java.util.Map memberTypes_String_values;
2717      /**
2718       * @attribute syn
2719       * @aspect TypeScopePropagation
2720       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:497
2721       */
2722      @SuppressWarnings({"unchecked", "cast"})
2723      public SimpleSet memberTypes(String name) {
2724        Object _parameters = name;
2725        if(memberTypes_String_values == null) memberTypes_String_values = new java.util.HashMap(4);
2726        if(memberTypes_String_values.containsKey(_parameters)) {
2727          return (SimpleSet)memberTypes_String_values.get(_parameters);
2728        }
2729          ASTNode$State state = state();
2730      int num = state.boundariesCrossed;
2731      boolean isFinal = this.is$Final();
2732        SimpleSet memberTypes_String_value = memberTypes_compute(name);
2733      if(isFinal && num == state().boundariesCrossed){ memberTypes_String_values.put(_parameters, memberTypes_String_value); }
2734            return memberTypes_String_value;
2735      }
2736      /**
2737       * @apilevel internal
2738       */
2739      private SimpleSet memberTypes_compute(String name) {  return SimpleSet.emptySet;  }
2740      protected java.util.Map localFields_String_values;
2741      /**
2742       * @attribute syn
2743       * @aspect Fields
2744       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:266
2745       */
2746      @SuppressWarnings({"unchecked", "cast"})
2747      public SimpleSet localFields(String name) {
2748        Object _parameters = name;
2749        if(localFields_String_values == null) localFields_String_values = new java.util.HashMap(4);
2750        if(localFields_String_values.containsKey(_parameters)) {
2751          return (SimpleSet)localFields_String_values.get(_parameters);
2752        }
2753          ASTNode$State state = state();
2754      int num = state.boundariesCrossed;
2755      boolean isFinal = this.is$Final();
2756        SimpleSet localFields_String_value = localFields_compute(name);
2757      if(isFinal && num == state().boundariesCrossed){ localFields_String_values.put(_parameters, localFields_String_value); }
2758            return localFields_String_value;
2759      }
2760      /**
2761       * @apilevel internal
2762       */
2763      private SimpleSet localFields_compute(String name) {  return localFieldsMap().containsKey(name) ? (SimpleSet)localFieldsMap().get(name) : SimpleSet.emptySet;  }
2764      /**
2765       * @apilevel internal
2766       */
2767      protected boolean localFieldsMap_computed = false;
2768      /**
2769       * @apilevel internal
2770       */
2771      protected HashMap localFieldsMap_value;
2772      /**
2773       * @attribute syn
2774       * @aspect Fields
2775       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:269
2776       */
2777      @SuppressWarnings({"unchecked", "cast"})
2778      public HashMap localFieldsMap() {
2779        if(localFieldsMap_computed) {
2780          return localFieldsMap_value;
2781        }
2782          ASTNode$State state = state();
2783      int num = state.boundariesCrossed;
2784      boolean isFinal = this.is$Final();
2785        localFieldsMap_value = localFieldsMap_compute();
2786      if(isFinal && num == state().boundariesCrossed){ localFieldsMap_computed = true; }
2787            return localFieldsMap_value;
2788      }
2789      /**
2790       * @apilevel internal
2791       */
2792      private HashMap localFieldsMap_compute() {
2793        HashMap map = new HashMap();
2794        for(int i = 0; i < getNumBodyDecl(); i++) {
2795          if(getBodyDecl(i) instanceof FieldDeclaration) {
2796            FieldDeclaration decl = (FieldDeclaration)getBodyDecl(i);
2797            SimpleSet fields = (SimpleSet)map.get(decl.name());
2798            if(fields == null) fields = SimpleSet.emptySet;
2799            fields = fields.add(decl);
2800            map.put(decl.name(), fields);
2801          }
2802        }
2803        return map;
2804      }
2805      /**
2806       * @apilevel internal
2807       */
2808      protected boolean memberFieldsMap_computed = false;
2809      /**
2810       * @apilevel internal
2811       */
2812      protected HashMap memberFieldsMap_value;
2813      /**
2814       * @attribute syn
2815       * @aspect Fields
2816       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:282
2817       */
2818      @SuppressWarnings({"unchecked", "cast"})
2819      public HashMap memberFieldsMap() {
2820        if(memberFieldsMap_computed) {
2821          return memberFieldsMap_value;
2822        }
2823          ASTNode$State state = state();
2824      int num = state.boundariesCrossed;
2825      boolean isFinal = this.is$Final();
2826        memberFieldsMap_value = memberFieldsMap_compute();
2827      if(isFinal && num == state().boundariesCrossed){ memberFieldsMap_computed = true; }
2828            return memberFieldsMap_value;
2829      }
2830      /**
2831       * @apilevel internal
2832       */
2833      private HashMap memberFieldsMap_compute() {  return localFieldsMap();  }
2834      protected java.util.Map memberFields_String_values;
2835      /**
2836       * @attribute syn
2837       * @aspect Fields
2838       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:331
2839       */
2840      @SuppressWarnings({"unchecked", "cast"})
2841      public SimpleSet memberFields(String name) {
2842        Object _parameters = name;
2843        if(memberFields_String_values == null) memberFields_String_values = new java.util.HashMap(4);
2844        if(memberFields_String_values.containsKey(_parameters)) {
2845          return (SimpleSet)memberFields_String_values.get(_parameters);
2846        }
2847          ASTNode$State state = state();
2848      int num = state.boundariesCrossed;
2849      boolean isFinal = this.is$Final();
2850        SimpleSet memberFields_String_value = memberFields_compute(name);
2851      if(isFinal && num == state().boundariesCrossed){ memberFields_String_values.put(_parameters, memberFields_String_value); }
2852            return memberFields_String_value;
2853      }
2854      /**
2855       * @apilevel internal
2856       */
2857      private SimpleSet memberFields_compute(String name) {  return localFields(name);  }
2858      /**
2859       * @apilevel internal
2860       */
2861      protected boolean hasAbstract_computed = false;
2862      /**
2863       * @apilevel internal
2864       */
2865      protected boolean hasAbstract_value;
2866      /**
2867       * @attribute syn
2868       * @aspect Modifiers
2869       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:14
2870       */
2871      @SuppressWarnings({"unchecked", "cast"})
2872      public boolean hasAbstract() {
2873        if(hasAbstract_computed) {
2874          return hasAbstract_value;
2875        }
2876          ASTNode$State state = state();
2877      int num = state.boundariesCrossed;
2878      boolean isFinal = this.is$Final();
2879        hasAbstract_value = hasAbstract_compute();
2880      if(isFinal && num == state().boundariesCrossed){ hasAbstract_computed = true; }
2881            return hasAbstract_value;
2882      }
2883      /**
2884       * @apilevel internal
2885       */
2886      private boolean hasAbstract_compute() {  return false;  }
2887      /**
2888       * @apilevel internal
2889       */
2890      protected boolean unimplementedMethods_computed = false;
2891      /**
2892       * @apilevel internal
2893       */
2894      protected Collection unimplementedMethods_value;
2895      /**
2896       * @attribute syn
2897       * @aspect Modifiers
2898       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:16
2899       */
2900      @SuppressWarnings({"unchecked", "cast"})
2901      public Collection unimplementedMethods() {
2902        if(unimplementedMethods_computed) {
2903          return unimplementedMethods_value;
2904        }
2905          ASTNode$State state = state();
2906      int num = state.boundariesCrossed;
2907      boolean isFinal = this.is$Final();
2908        unimplementedMethods_value = unimplementedMethods_compute();
2909      if(isFinal && num == state().boundariesCrossed){ unimplementedMethods_computed = true; }
2910            return unimplementedMethods_value;
2911      }
2912      /**
2913       * @apilevel internal
2914       */
2915      private Collection unimplementedMethods_compute() {  return Collections.EMPTY_LIST;  }
2916      /**
2917       * @apilevel internal
2918       */
2919      protected boolean isPublic_computed = false;
2920      /**
2921       * @apilevel internal
2922       */
2923      protected boolean isPublic_value;
2924      /**
2925       * @attribute syn
2926       * @aspect Modifiers
2927       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:200
2928       */
2929      @SuppressWarnings({"unchecked", "cast"})
2930      public boolean isPublic() {
2931        if(isPublic_computed) {
2932          return isPublic_value;
2933        }
2934          ASTNode$State state = state();
2935      int num = state.boundariesCrossed;
2936      boolean isFinal = this.is$Final();
2937        isPublic_value = isPublic_compute();
2938      if(isFinal && num == state().boundariesCrossed){ isPublic_computed = true; }
2939            return isPublic_value;
2940      }
2941      /**
2942       * @apilevel internal
2943       */
2944      private boolean isPublic_compute() {  return getModifiers().isPublic() || isMemberType() && enclosingType().isInterfaceDecl();  }
2945      /**
2946       * @attribute syn
2947       * @aspect Modifiers
2948       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:202
2949       */
2950      public boolean isPrivate() {
2951        ASTNode$State state = state();
2952        try {  return getModifiers().isPrivate();  }
2953        finally {
2954        }
2955      }
2956      /**
2957       * @attribute syn
2958       * @aspect Modifiers
2959       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:203
2960       */
2961      public boolean isProtected() {
2962        ASTNode$State state = state();
2963        try {  return getModifiers().isProtected();  }
2964        finally {
2965        }
2966      }
2967      /**
2968       * @attribute syn
2969       * @aspect Modifiers
2970       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:204
2971       */
2972      public boolean isAbstract() {
2973        ASTNode$State state = state();
2974        try {  return getModifiers().isAbstract();  }
2975        finally {
2976        }
2977      }
2978      /**
2979       * @apilevel internal
2980       */
2981      protected boolean isStatic_computed = false;
2982      /**
2983       * @apilevel internal
2984       */
2985      protected boolean isStatic_value;
2986      /**
2987       * @attribute syn
2988       * @aspect Modifiers
2989       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:206
2990       */
2991      @SuppressWarnings({"unchecked", "cast"})
2992      public boolean isStatic() {
2993        if(isStatic_computed) {
2994          return isStatic_value;
2995        }
2996          ASTNode$State state = state();
2997      int num = state.boundariesCrossed;
2998      boolean isFinal = this.is$Final();
2999        isStatic_value = isStatic_compute();
3000      if(isFinal && num == state().boundariesCrossed){ isStatic_computed = true; }
3001            return isStatic_value;
3002      }
3003      /**
3004       * @apilevel internal
3005       */
3006      private boolean isStatic_compute() {  return getModifiers().isStatic() || isMemberType() && enclosingType().isInterfaceDecl();  }
3007      /**
3008       * @attribute syn
3009       * @aspect Modifiers
3010       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:209
3011       */
3012      public boolean isFinal() {
3013        ASTNode$State state = state();
3014        try {  return getModifiers().isFinal();  }
3015        finally {
3016        }
3017      }
3018      /**
3019       * @attribute syn
3020       * @aspect Modifiers
3021       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:210
3022       */
3023      public boolean isStrictfp() {
3024        ASTNode$State state = state();
3025        try {  return getModifiers().isStrictfp();  }
3026        finally {
3027        }
3028      }
3029      /**
3030       * @attribute syn
3031       * @aspect Modifiers
3032       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:212
3033       */
3034      public boolean isSynthetic() {
3035        ASTNode$State state = state();
3036        try {  return getModifiers().isSynthetic();  }
3037        finally {
3038        }
3039      }
3040      /**
3041       * @attribute syn
3042       * @aspect NameCheck
3043       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:274
3044       */
3045      public boolean hasEnclosingTypeDecl(String name) {
3046        ASTNode$State state = state();
3047        try {
3048        TypeDecl enclosingType = enclosingType();
3049        if(enclosingType != null) {
3050          return enclosingType.name().equals(name) || enclosingType.hasEnclosingTypeDecl(name);
3051        }
3052        return false;
3053      }
3054        finally {
3055        }
3056      }
3057      /**
3058       * @attribute syn
3059       * @aspect NameCheck
3060       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:427
3061       */
3062      public boolean assignableToInt() {
3063        ASTNode$State state = state();
3064        try {  return false;  }
3065        finally {
3066        }
3067      }
3068      /**
3069       * @attribute syn
3070       * @aspect PrettyPrint
3071       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:758
3072       */
3073      public boolean addsIndentationLevel() {
3074        ASTNode$State state = state();
3075        try {  return true;  }
3076        finally {
3077        }
3078      }
3079      /**
3080       * @attribute syn
3081       * @aspect PrettyPrint
3082       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:800
3083       */
3084      public String dumpString() {
3085        ASTNode$State state = state();
3086        try {  return getClass().getName() + " [" + getID() + "]";  }
3087        finally {
3088        }
3089      }
3090      /**
3091       * @attribute syn
3092       * @aspect TypeName
3093       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:68
3094       */
3095      public String name() {
3096        ASTNode$State state = state();
3097        try {  return getID();  }
3098        finally {
3099        }
3100      }
3101      /**
3102       * @apilevel internal
3103       */
3104      protected boolean fullName_computed = false;
3105      /**
3106       * @apilevel internal
3107       */
3108      protected String fullName_value;
3109      /**
3110       * @attribute syn
3111       * @aspect TypeName
3112       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:70
3113       */
3114      @SuppressWarnings({"unchecked", "cast"})
3115      public String fullName() {
3116        if(fullName_computed) {
3117          return fullName_value;
3118        }
3119          ASTNode$State state = state();
3120      int num = state.boundariesCrossed;
3121      boolean isFinal = this.is$Final();
3122        fullName_value = fullName_compute();
3123      if(isFinal && num == state().boundariesCrossed){ fullName_computed = true; }
3124            return fullName_value;
3125      }
3126      /**
3127       * @apilevel internal
3128       */
3129      private String fullName_compute() {
3130        if(isNestedType())
3131          return enclosingType().fullName() + "." + name();
3132        String packageName = packageName();
3133        if(packageName.equals(""))
3134          return name();
3135        return packageName + "." + name();
3136      }
3137      /**
3138       * @apilevel internal
3139       */
3140      protected boolean typeName_computed = false;
3141      /**
3142       * @apilevel internal
3143       */
3144      protected String typeName_value;
3145      /**
3146       * @attribute syn
3147       * @aspect TypeName
3148       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:79
3149       */
3150      @SuppressWarnings({"unchecked", "cast"})
3151      public String typeName() {
3152        if(typeName_computed) {
3153          return typeName_value;
3154        }
3155          ASTNode$State state = state();
3156      int num = state.boundariesCrossed;
3157      boolean isFinal = this.is$Final();
3158        typeName_value = typeName_compute();
3159      if(isFinal && num == state().boundariesCrossed){ typeName_computed = true; }
3160            return typeName_value;
3161      }
3162      /**
3163       * @apilevel internal
3164       */
3165      private String typeName_compute() {
3166        if(isNestedType())
3167          return enclosingType().typeName() + "." + name();
3168        String packageName = packageName();
3169        if(packageName.equals("") || packageName.equals(PRIMITIVE_PACKAGE_NAME))
3170          return name();
3171        return packageName + "." + name();
3172      }
3173      /**
3174       * @attribute syn
3175       * @aspect TypeConversion
3176       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:15
3177       */
3178      public boolean identityConversionTo(TypeDecl type) {
3179        ASTNode$State state = state();
3180        try {  return this == type;  }
3181        finally {
3182        }
3183      }
3184      /**
3185       * @attribute syn
3186       * @aspect TypeConversion
3187       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:17
3188       */
3189      public boolean wideningConversionTo(TypeDecl type) {
3190        ASTNode$State state = state();
3191        try {  return instanceOf(type);  }
3192        finally {
3193        }
3194      }
3195      protected java.util.Map narrowingConversionTo_TypeDecl_values;
3196      /**
3197       * @attribute syn
3198       * @aspect TypeConversion
3199       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:18
3200       */
3201      @SuppressWarnings({"unchecked", "cast"})
3202      public boolean narrowingConversionTo(TypeDecl type) {
3203        Object _parameters = type;
3204        if(narrowingConversionTo_TypeDecl_values == null) narrowingConversionTo_TypeDecl_values = new java.util.HashMap(4);
3205        if(narrowingConversionTo_TypeDecl_values.containsKey(_parameters)) {
3206          return ((Boolean)narrowingConversionTo_TypeDecl_values.get(_parameters)).booleanValue();
3207        }
3208          ASTNode$State state = state();
3209      int num = state.boundariesCrossed;
3210      boolean isFinal = this.is$Final();
3211        boolean narrowingConversionTo_TypeDecl_value = narrowingConversionTo_compute(type);
3212      if(isFinal && num == state().boundariesCrossed){ narrowingConversionTo_TypeDecl_values.put(_parameters, Boolean.valueOf(narrowingConversionTo_TypeDecl_value)); }
3213            return narrowingConversionTo_TypeDecl_value;
3214      }
3215      /**
3216       * @apilevel internal
3217       */
3218      private boolean narrowingConversionTo_compute(TypeDecl type) {  return instanceOf(type);  }
3219      /**
3220       * @attribute syn
3221       * @aspect TypeConversion
3222       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:55
3223       */
3224      public boolean stringConversion() {
3225        ASTNode$State state = state();
3226        try {  return true;  }
3227        finally {
3228        }
3229      }
3230      /**
3231       * @attribute syn
3232       * @aspect TypeConversion
3233       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:59
3234       */
3235      public boolean assignConversionTo(TypeDecl type, Expr expr) {
3236        ASTNode$State state = state();
3237        try {
3238        if(refined_TypeConversion_TypeDecl_assignConversionTo_TypeDecl_Expr(type, expr))
3239          return true;
3240        boolean canBoxThis = this instanceof PrimitiveType;
3241        boolean canBoxType = type instanceof PrimitiveType;
3242        boolean canUnboxThis = !unboxed().isUnknown();
3243        boolean canUnboxType = !type.unboxed().isUnknown();
3244        TypeDecl t = !canUnboxThis && canUnboxType ? type.unboxed() : type;
3245        boolean sourceIsConstant = expr != null ? expr.isConstant() : false;
3246        if(sourceIsConstant && (isInt() || isChar() || isShort() || isByte()) &&
3247            (t.isByte() || t.isShort() || t.isChar()) &&
3248            narrowingConversionTo(t) && expr.representableIn(t))
3249          return true;
3250        if(canBoxThis && !canBoxType && boxed().wideningConversionTo(type))
3251          return true;
3252        else if(canUnboxThis && !canUnboxType && unboxed().wideningConversionTo(type))
3253          return true;
3254    
3255        return false;
3256      }
3257        finally {
3258        }
3259      }
3260      protected java.util.Map methodInvocationConversionTo_TypeDecl_values;
3261      /**
3262       * @attribute syn
3263       * @aspect AutoBoxing
3264       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/AutoBoxing.jrag:99
3265       */
3266      @SuppressWarnings({"unchecked", "cast"})
3267      public boolean methodInvocationConversionTo(TypeDecl type) {
3268        Object _parameters = type;
3269        if(methodInvocationConversionTo_TypeDecl_values == null) methodInvocationConversionTo_TypeDecl_values = new java.util.HashMap(4);
3270        if(methodInvocationConversionTo_TypeDecl_values.containsKey(_parameters)) {
3271          return ((Boolean)methodInvocationConversionTo_TypeDecl_values.get(_parameters)).booleanValue();
3272        }
3273          ASTNode$State state = state();
3274      int num = state.boundariesCrossed;
3275      boolean isFinal = this.is$Final();
3276        boolean methodInvocationConversionTo_TypeDecl_value = methodInvocationConversionTo_compute(type);
3277      if(isFinal && num == state().boundariesCrossed){ methodInvocationConversionTo_TypeDecl_values.put(_parameters, Boolean.valueOf(methodInvocationConversionTo_TypeDecl_value)); }
3278            return methodInvocationConversionTo_TypeDecl_value;
3279      }
3280      /**
3281       * @apilevel internal
3282       */
3283      private boolean methodInvocationConversionTo_compute(TypeDecl type) {
3284        if(refined_TypeConversion_TypeDecl_methodInvocationConversionTo_TypeDecl(type))
3285          return true;
3286        boolean canBoxThis = this instanceof PrimitiveType;
3287        boolean canBoxType = type instanceof PrimitiveType;
3288        boolean canUnboxThis = !unboxed().isUnknown();
3289        boolean canUnboxType = !type.unboxed().isUnknown();
3290        if(canBoxThis && !canBoxType)
3291          return boxed().wideningConversionTo(type);
3292        else if(canUnboxThis && !canUnboxType)
3293          return unboxed().wideningConversionTo(type);
3294        return false;
3295      }
3296      protected java.util.Map castingConversionTo_TypeDecl_values;
3297      /**
3298       * @attribute syn
3299       * @aspect AutoBoxing
3300       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/AutoBoxing.jrag:114
3301       */
3302      @SuppressWarnings({"unchecked", "cast"})
3303      public boolean castingConversionTo(TypeDecl type) {
3304        Object _parameters = type;
3305        if(castingConversionTo_TypeDecl_values == null) castingConversionTo_TypeDecl_values = new java.util.HashMap(4);
3306        if(castingConversionTo_TypeDecl_values.containsKey(_parameters)) {
3307          return ((Boolean)castingConversionTo_TypeDecl_values.get(_parameters)).booleanValue();
3308        }
3309          ASTNode$State state = state();
3310      int num = state.boundariesCrossed;
3311      boolean isFinal = this.is$Final();
3312        boolean castingConversionTo_TypeDecl_value = castingConversionTo_compute(type);
3313      if(isFinal && num == state().boundariesCrossed){ castingConversionTo_TypeDecl_values.put(_parameters, Boolean.valueOf(castingConversionTo_TypeDecl_value)); }
3314            return castingConversionTo_TypeDecl_value;
3315      }
3316      /**
3317       * @apilevel internal
3318       */
3319      private boolean castingConversionTo_compute(TypeDecl type) {
3320        if(refined_TypeConversion_TypeDecl_castingConversionTo_TypeDecl(type))
3321          return true;
3322        boolean canBoxThis = this instanceof PrimitiveType;
3323        boolean canBoxType = type instanceof PrimitiveType;
3324        boolean canUnboxThis = !unboxed().isUnknown();
3325        boolean canUnboxType = !type.unboxed().isUnknown();
3326        if(canBoxThis && !canBoxType)
3327          return boxed().wideningConversionTo(type);
3328        else if(canUnboxThis && !canUnboxType)
3329          return unboxed().wideningConversionTo(type);
3330        return false;
3331        /*
3332        else if(boxingConversionTo(type))
3333          return true;
3334        else if(unboxingConversionTo(type))
3335          return true;
3336        return false;
3337        */
3338      }
3339      /**
3340       * @attribute syn
3341       * @aspect NumericPromotion
3342       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:146
3343       */
3344      public TypeDecl unaryNumericPromotion() {
3345        ASTNode$State state = state();
3346        try {  return this;  }
3347        finally {
3348        }
3349      }
3350      /**
3351       * @attribute syn
3352       * @aspect NumericPromotion
3353       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:154
3354       */
3355      public TypeDecl binaryNumericPromotion(TypeDecl type) {
3356        ASTNode$State state = state();
3357        try {  return unknownType();  }
3358        finally {
3359        }
3360      }
3361      /**
3362       * @attribute syn
3363       * @aspect TypeAnalysis
3364       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:165
3365       */
3366      public boolean isReferenceType() {
3367        ASTNode$State state = state();
3368        try {  return false;  }
3369        finally {
3370        }
3371      }
3372      /**
3373       * @attribute syn
3374       * @aspect TypeAnalysis
3375       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:168
3376       */
3377      public boolean isPrimitiveType() {
3378        ASTNode$State state = state();
3379        try {  return false;  }
3380        finally {
3381        }
3382      }
3383      /**
3384       * @attribute syn
3385       * @aspect TypeAnalysis
3386       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:173
3387       */
3388      public boolean isNumericType() {
3389        ASTNode$State state = state();
3390        try {  return false;  }
3391        finally {
3392        }
3393      }
3394      /**
3395       * @attribute syn
3396       * @aspect TypeAnalysis
3397       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:177
3398       */
3399      public boolean isIntegralType() {
3400        ASTNode$State state = state();
3401        try {  return false;  }
3402        finally {
3403        }
3404      }
3405      /**
3406       * @attribute syn
3407       * @aspect TypeAnalysis
3408       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:181
3409       */
3410      public boolean isBoolean() {
3411        ASTNode$State state = state();
3412        try {  return false;  }
3413        finally {
3414        }
3415      }
3416      /**
3417       * @attribute syn
3418       * @aspect TypeAnalysis
3419       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:185
3420       */
3421      public boolean isByte() {
3422        ASTNode$State state = state();
3423        try {  return false;  }
3424        finally {
3425        }
3426      }
3427      /**
3428       * @attribute syn
3429       * @aspect TypeAnalysis
3430       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:187
3431       */
3432      public boolean isChar() {
3433        ASTNode$State state = state();
3434        try {  return false;  }
3435        finally {
3436        }
3437      }
3438      /**
3439       * @attribute syn
3440       * @aspect TypeAnalysis
3441       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:189
3442       */
3443      public boolean isShort() {
3444        ASTNode$State state = state();
3445        try {  return false;  }
3446        finally {
3447        }
3448      }
3449      /**
3450       * @attribute syn
3451       * @aspect TypeAnalysis
3452       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:191
3453       */
3454      public boolean isInt() {
3455        ASTNode$State state = state();
3456        try {  return false;  }
3457        finally {
3458        }
3459      }
3460      /**
3461       * @attribute syn
3462       * @aspect TypeAnalysis
3463       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:195
3464       */
3465      public boolean isFloat() {
3466        ASTNode$State state = state();
3467        try {  return false;  }
3468        finally {
3469        }
3470      }
3471      /**
3472       * @attribute syn
3473       * @aspect TypeAnalysis
3474       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:197
3475       */
3476      public boolean isLong() {
3477        ASTNode$State state = state();
3478        try {  return false;  }
3479        finally {
3480        }
3481      }
3482      /**
3483       * @attribute syn
3484       * @aspect TypeAnalysis
3485       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:199
3486       */
3487      public boolean isDouble() {
3488        ASTNode$State state = state();
3489        try {  return false;  }
3490        finally {
3491        }
3492      }
3493      /**
3494       * @attribute syn
3495       * @aspect TypeAnalysis
3496       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:202
3497       */
3498      public boolean isVoid() {
3499        ASTNode$State state = state();
3500        try {  return false;  }
3501        finally {
3502        }
3503      }
3504      /**
3505       * @attribute syn
3506       * @aspect TypeAnalysis
3507       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:205
3508       */
3509      public boolean isNull() {
3510        ASTNode$State state = state();
3511        try {  return false;  }
3512        finally {
3513        }
3514      }
3515      /**
3516       * @attribute syn
3517       * @aspect TypeAnalysis
3518       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:209
3519       */
3520      public boolean isClassDecl() {
3521        ASTNode$State state = state();
3522        try {  return false;  }
3523        finally {
3524        }
3525      }
3526      /**
3527       * @attribute syn
3528       * @aspect TypeAnalysis
3529       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:211
3530       */
3531      public boolean isInterfaceDecl() {
3532        ASTNode$State state = state();
3533        try {  return false;  }
3534        finally {
3535        }
3536      }
3537      /**
3538       * @attribute syn
3539       * @aspect TypeAnalysis
3540       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:213
3541       */
3542      public boolean isArrayDecl() {
3543        ASTNode$State state = state();
3544        try {  return false;  }
3545        finally {
3546        }
3547      }
3548      /**
3549       * @attribute syn
3550       * @aspect TypeAnalysis
3551       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:221
3552       */
3553      public boolean isPrimitive() {
3554        ASTNode$State state = state();
3555        try {  return false;  }
3556        finally {
3557        }
3558      }
3559      /**
3560       * @apilevel internal
3561       */
3562      protected boolean isString_computed = false;
3563      /**
3564       * @apilevel internal
3565       */
3566      protected boolean isString_value;
3567      /**
3568       * @attribute syn
3569       * @aspect TypeAnalysis
3570       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:224
3571       */
3572      @SuppressWarnings({"unchecked", "cast"})
3573      public boolean isString() {
3574        if(isString_computed) {
3575          return isString_value;
3576        }
3577          ASTNode$State state = state();
3578      int num = state.boundariesCrossed;
3579      boolean isFinal = this.is$Final();
3580        isString_value = isString_compute();
3581      if(isFinal && num == state().boundariesCrossed){ isString_computed = true; }
3582            return isString_value;
3583      }
3584      /**
3585       * @apilevel internal
3586       */
3587      private boolean isString_compute() {  return false;  }
3588      /**
3589       * @apilevel internal
3590       */
3591      protected boolean isObject_computed = false;
3592      /**
3593       * @apilevel internal
3594       */
3595      protected boolean isObject_value;
3596      /**
3597       * @attribute syn
3598       * @aspect TypeAnalysis
3599       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:227
3600       */
3601      @SuppressWarnings({"unchecked", "cast"})
3602      public boolean isObject() {
3603        if(isObject_computed) {
3604          return isObject_value;
3605        }
3606          ASTNode$State state = state();
3607      int num = state.boundariesCrossed;
3608      boolean isFinal = this.is$Final();
3609        isObject_value = isObject_compute();
3610      if(isFinal && num == state().boundariesCrossed){ isObject_computed = true; }
3611            return isObject_value;
3612      }
3613      /**
3614       * @apilevel internal
3615       */
3616      private boolean isObject_compute() {  return false;  }
3617      /**
3618       * @attribute syn
3619       * @aspect TypeAnalysis
3620       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:230
3621       */
3622      public boolean isUnknown() {
3623        ASTNode$State state = state();
3624        try {  return false;  }
3625        finally {
3626        }
3627      }
3628      protected java.util.Map instanceOf_TypeDecl_values;
3629      /**
3630       * @attribute syn
3631       * @aspect GenericsSubtype
3632       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:386
3633       */
3634      @SuppressWarnings({"unchecked", "cast"})
3635      public boolean instanceOf(TypeDecl type) {
3636        Object _parameters = type;
3637        if(instanceOf_TypeDecl_values == null) instanceOf_TypeDecl_values = new java.util.HashMap(4);
3638        if(instanceOf_TypeDecl_values.containsKey(_parameters)) {
3639          return ((Boolean)instanceOf_TypeDecl_values.get(_parameters)).booleanValue();
3640        }
3641          ASTNode$State state = state();
3642      int num = state.boundariesCrossed;
3643      boolean isFinal = this.is$Final();
3644        boolean instanceOf_TypeDecl_value = instanceOf_compute(type);
3645      if(isFinal && num == state().boundariesCrossed){ instanceOf_TypeDecl_values.put(_parameters, Boolean.valueOf(instanceOf_TypeDecl_value)); }
3646            return instanceOf_TypeDecl_value;
3647      }
3648      /**
3649       * @apilevel internal
3650       */
3651      private boolean instanceOf_compute(TypeDecl type) { return subtype(type); }
3652      /**
3653       * @attribute syn
3654       * @aspect TypeWideningAndIdentity
3655       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:423
3656       */
3657      public boolean isSupertypeOfClassDecl(ClassDecl type) {
3658        ASTNode$State state = state();
3659        try {  return type == this;  }
3660        finally {
3661        }
3662      }
3663      /**
3664       * @attribute syn
3665       * @aspect TypeWideningAndIdentity
3666       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:440
3667       */
3668      public boolean isSupertypeOfInterfaceDecl(InterfaceDecl type) {
3669        ASTNode$State state = state();
3670        try {  return type == this;  }
3671        finally {
3672        }
3673      }
3674      /**
3675       * @attribute syn
3676       * @aspect TypeWideningAndIdentity
3677       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:453
3678       */
3679      public boolean isSupertypeOfArrayDecl(ArrayDecl type) {
3680        ASTNode$State state = state();
3681        try {  return this == type;  }
3682        finally {
3683        }
3684      }
3685      /**
3686       * @attribute syn
3687       * @aspect TypeWideningAndIdentity
3688       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:475
3689       */
3690      public boolean isSupertypeOfPrimitiveType(PrimitiveType type) {
3691        ASTNode$State state = state();
3692        try {  return type == this;  }
3693        finally {
3694        }
3695      }
3696      /**
3697       * @attribute syn
3698       * @aspect TypeWideningAndIdentity
3699       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:482
3700       */
3701      public boolean isSupertypeOfNullType(NullType type) {
3702        ASTNode$State state = state();
3703        try {  return false;  }
3704        finally {
3705        }
3706      }
3707      /**
3708       * @attribute syn
3709       * @aspect TypeWideningAndIdentity
3710       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:486
3711       */
3712      public boolean isSupertypeOfVoidType(VoidType type) {
3713        ASTNode$State state = state();
3714        try {  return false;  }
3715        finally {
3716        }
3717      }
3718      /**
3719       * @attribute syn
3720       * @aspect NestedTypes
3721       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:497
3722       */
3723      public TypeDecl topLevelType() {
3724        ASTNode$State state = state();
3725        try {
3726        if(isTopLevelType())
3727          return this;
3728        return enclosingType().topLevelType();
3729      }
3730        finally {
3731        }
3732      }
3733      /**
3734       * @attribute syn
3735       * @aspect NestedTypes
3736       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:523
3737       */
3738      public boolean isTopLevelType() {
3739        ASTNode$State state = state();
3740        try {  return !isNestedType();  }
3741        finally {
3742        }
3743      }
3744      /**
3745       * @attribute syn
3746       * @aspect NestedTypes
3747       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:534
3748       */
3749      public boolean isInnerClass() {
3750        ASTNode$State state = state();
3751        try {  return false;  }
3752        finally {
3753        }
3754      }
3755      /**
3756       * @attribute syn
3757       * @aspect NestedTypes
3758       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:536
3759       */
3760      public boolean isInnerType() {
3761        ASTNode$State state = state();
3762        try {  return (isLocalClass() || isAnonymous() || (isMemberType() && !isStatic())) && !inStaticContext();  }
3763        finally {
3764        }
3765      }
3766      /**
3767       * @attribute syn
3768       * @aspect NestedTypes
3769       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:538
3770       */
3771      public boolean isInnerTypeOf(TypeDecl typeDecl) {
3772        ASTNode$State state = state();
3773        try {  return typeDecl == this || (isInnerType() && enclosingType().isInnerTypeOf(typeDecl));  }
3774        finally {
3775        }
3776      }
3777      /**
3778       * @attribute syn
3779       * @aspect NestedTypes
3780       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:545
3781       */
3782      public TypeDecl withinBodyThatSubclasses(TypeDecl type) {
3783        ASTNode$State state = state();
3784        try {
3785        if(instanceOf(type))
3786          return this;
3787        if(!isTopLevelType())
3788          return enclosingType().withinBodyThatSubclasses(type);
3789        return null;
3790      }
3791        finally {
3792        }
3793      }
3794      /**
3795       * @attribute syn
3796       * @aspect NestedTypes
3797       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:553
3798       */
3799      public boolean encloses(TypeDecl type) {
3800        ASTNode$State state = state();
3801        try {  return type.enclosedBy(this);  }
3802        finally {
3803        }
3804      }
3805      /**
3806       * @attribute syn
3807       * @aspect NestedTypes
3808       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:555
3809       */
3810      public boolean enclosedBy(TypeDecl type) {
3811        ASTNode$State state = state();
3812        try {
3813        if(this == type)
3814          return true;
3815        if(isTopLevelType())
3816          return false;
3817        return enclosingType().enclosedBy(type);
3818      }
3819        finally {
3820        }
3821      }
3822      /**
3823       * @attribute syn
3824       * @aspect NestedTypes
3825       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:569
3826       */
3827      public TypeDecl hostType() {
3828        ASTNode$State state = state();
3829        try {  return this;  }
3830        finally {
3831        }
3832      }
3833      /**
3834       * @apilevel internal
3835       */
3836      protected int isCircular_visited = -1;
3837      /**
3838       * @apilevel internal
3839       */
3840      protected boolean isCircular_computed = false;
3841      /**
3842       * @apilevel internal
3843       */
3844      protected boolean isCircular_initialized = false;
3845      /**
3846       * @apilevel internal
3847       */
3848      protected boolean isCircular_value;
3849      /**
3850       * @attribute syn
3851       * @aspect Circularity
3852       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:676
3853       */
3854      @SuppressWarnings({"unchecked", "cast"})
3855      public boolean isCircular() {
3856        if(isCircular_computed) {
3857          return isCircular_value;
3858        }
3859        ASTNode$State state = state();
3860        if (!isCircular_initialized) {
3861          isCircular_initialized = true;
3862          isCircular_value = true;
3863        }
3864        if (!state.IN_CIRCLE) {
3865          state.IN_CIRCLE = true;
3866        int num = state.boundariesCrossed;
3867        boolean isFinal = this.is$Final();
3868          do {
3869            isCircular_visited = state.CIRCLE_INDEX;
3870            state.CHANGE = false;
3871            boolean new_isCircular_value = isCircular_compute();
3872            if (new_isCircular_value!=isCircular_value)
3873              state.CHANGE = true;
3874            isCircular_value = new_isCircular_value; 
3875            state.CIRCLE_INDEX++;
3876          } while (state.CHANGE);
3877            if(isFinal && num == state().boundariesCrossed) {
3878          isCircular_computed = true;
3879          }
3880          else {
3881          state.RESET_CYCLE = true;
3882          isCircular_compute();
3883          state.RESET_CYCLE = false;
3884            isCircular_computed = false;
3885            isCircular_initialized = false;
3886          }
3887          state.IN_CIRCLE = false; 
3888              return isCircular_value;
3889        }
3890        if(isCircular_visited != state.CIRCLE_INDEX) {
3891          isCircular_visited = state.CIRCLE_INDEX;
3892          if (state.RESET_CYCLE) {
3893            isCircular_computed = false;
3894            isCircular_initialized = false;
3895            isCircular_visited = -1;
3896                return isCircular_value;
3897          }
3898          boolean new_isCircular_value = isCircular_compute();
3899          if (new_isCircular_value!=isCircular_value)
3900            state.CHANGE = true;
3901          isCircular_value = new_isCircular_value; 
3902              return isCircular_value;
3903        }
3904            return isCircular_value;
3905      }
3906      /**
3907       * @apilevel internal
3908       */
3909      private boolean isCircular_compute() {  return false;  }
3910      /**
3911       * @apilevel internal
3912       */
3913      protected boolean innerClassesAttributeEntries_computed = false;
3914      /**
3915       * @apilevel internal
3916       */
3917      protected Collection innerClassesAttributeEntries_value;
3918      /**
3919       * @attribute syn
3920       * @aspect Attributes
3921       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Attributes.jrag:83
3922       */
3923      @SuppressWarnings({"unchecked", "cast"})
3924      public Collection innerClassesAttributeEntries() {
3925        if(innerClassesAttributeEntries_computed) {
3926          return innerClassesAttributeEntries_value;
3927        }
3928          ASTNode$State state = state();
3929      int num = state.boundariesCrossed;
3930      boolean isFinal = this.is$Final();
3931        innerClassesAttributeEntries_value = innerClassesAttributeEntries_compute();
3932      if(isFinal && num == state().boundariesCrossed){ innerClassesAttributeEntries_computed = true; }
3933            return innerClassesAttributeEntries_value;
3934      }
3935      /**
3936       * @apilevel internal
3937       */
3938      private Collection innerClassesAttributeEntries_compute() {
3939        HashSet list = new HashSet();
3940        if(isNestedType())
3941          list.add(this);
3942        for(Iterator iter = nestedTypes().iterator(); iter.hasNext(); )
3943          list.add(iter.next());
3944        for(Iterator iter = usedNestedTypes().iterator(); iter.hasNext(); )
3945          list.add(iter.next());
3946        return list;
3947      }
3948      /**
3949       * @apilevel internal
3950       */
3951      protected boolean attributes_computed = false;
3952      /**
3953       * @apilevel internal
3954       */
3955      protected Collection attributes_value;
3956      /**
3957       * @attribute syn
3958       * @aspect EnclosingMethodAttribute
3959       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/EnclosingMethodAttribute.jrag:12
3960       */
3961      @SuppressWarnings({"unchecked", "cast"})
3962      public Collection attributes() {
3963        if(attributes_computed) {
3964          return attributes_value;
3965        }
3966          ASTNode$State state = state();
3967      int num = state.boundariesCrossed;
3968      boolean isFinal = this.is$Final();
3969        attributes_value = attributes_compute();
3970      if(isFinal && num == state().boundariesCrossed){ attributes_computed = true; }
3971            return attributes_value;
3972      }
3973      /**
3974       * @apilevel internal
3975       */
3976      private Collection attributes_compute() {
3977        Collection c = refined_GenericsCodegen_TypeDecl_attributes();
3978        if(isLocalClass() || isAnonymous()) {
3979          c.add(new EnclosingMethod(constantPool(), this));
3980        }
3981        return c;
3982      }
3983      /**
3984       * @apilevel internal
3985       */
3986      protected boolean clinit_attributes_computed = false;
3987      /**
3988       * @apilevel internal
3989       */
3990      protected Collection clinit_attributes_value;
3991      /**
3992       * @attribute syn
3993       * @aspect Attributes
3994       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Attributes.jrag:206
3995       */
3996      @SuppressWarnings({"unchecked", "cast"})
3997      public Collection clinit_attributes() {
3998        if(clinit_attributes_computed) {
3999          return clinit_attributes_value;
4000        }
4001          ASTNode$State state = state();
4002      int num = state.boundariesCrossed;
4003      boolean isFinal = this.is$Final();
4004        clinit_attributes_value = clinit_attributes_compute();
4005      if(isFinal && num == state().boundariesCrossed){ clinit_attributes_computed = true; }
4006            return clinit_attributes_value;
4007      }
4008      /**
4009       * @apilevel internal
4010       */
4011      private Collection clinit_attributes_compute() {
4012        ArrayList l = new ArrayList();
4013        l.add(new CodeAttribute(bytecodes(constantPool()), null));
4014        return l;
4015      }
4016      /**
4017       * @attribute syn
4018       * @aspect CodeGeneration
4019       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:621
4020       */
4021      public byte arrayLoad() {
4022        ASTNode$State state = state();
4023        try { 
4024        throw new Error("Cannot create array load for TypeDecl");
4025      }
4026        finally {
4027        }
4028      }
4029      /**
4030       * @attribute syn
4031       * @aspect CodeGeneration
4032       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:723
4033       */
4034      public byte arrayStore() {
4035        ASTNode$State state = state();
4036        try { 
4037        throw new Error("Cannot create array load for TypeDecl");
4038      }
4039        finally {
4040        }
4041      }
4042      /**
4043       * @apilevel internal
4044       */
4045      protected boolean constantPool_computed = false;
4046      /**
4047       * @apilevel internal
4048       */
4049      protected ConstantPool constantPool_value;
4050      /**
4051       * @attribute syn
4052       * @aspect ConstantPool
4053       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/ConstantPool.jrag:14
4054       */
4055      @SuppressWarnings({"unchecked", "cast"})
4056      public ConstantPool constantPool() {
4057        if(constantPool_computed) {
4058          return constantPool_value;
4059        }
4060          ASTNode$State state = state();
4061      int num = state.boundariesCrossed;
4062      boolean isFinal = this.is$Final();
4063        constantPool_value = constantPool_compute();
4064      if(isFinal && num == state().boundariesCrossed){ constantPool_computed = true; }
4065            return constantPool_value;
4066      }
4067      /**
4068       * @apilevel internal
4069       */
4070      private ConstantPool constantPool_compute() {  return new ConstantPool(this);  }
4071      /**
4072       * @apilevel internal
4073       */
4074      protected boolean constantPoolName_computed = false;
4075      /**
4076       * @apilevel internal
4077       */
4078      protected String constantPoolName_value;
4079      /**
4080       * @attribute syn
4081       * @aspect ConstantPool
4082       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/ConstantPool.jrag:16
4083       */
4084      @SuppressWarnings({"unchecked", "cast"})
4085      public String constantPoolName() {
4086        if(constantPoolName_computed) {
4087          return constantPoolName_value;
4088        }
4089          ASTNode$State state = state();
4090      int num = state.boundariesCrossed;
4091      boolean isFinal = this.is$Final();
4092        constantPoolName_value = constantPoolName_compute();
4093      if(isFinal && num == state().boundariesCrossed){ constantPoolName_computed = true; }
4094            return constantPoolName_value;
4095      }
4096      /**
4097       * @apilevel internal
4098       */
4099      private String constantPoolName_compute() {
4100        if(!isNestedType()) {
4101          String packageName = packageName();
4102          if(!packageName.equals("")) {
4103            packageName = packageName.replace('.', '/') + "/";
4104          }
4105          return packageName + name();
4106        }
4107        else {
4108          String prefix = enclosingType().constantPoolName();
4109          if(isAnonymous()) {
4110            return prefix + "$" + uniqueIndex();
4111          }
4112          else if(isLocalClass()) {
4113            return prefix + "$" + uniqueIndex() + name();
4114          }
4115          return prefix + "$" + name();
4116        }
4117      }
4118      /**
4119       * @apilevel internal
4120       */
4121      protected boolean typeDescriptor_computed = false;
4122      /**
4123       * @apilevel internal
4124       */
4125      protected String typeDescriptor_value;
4126      /**
4127       * @attribute syn
4128       * @aspect ConstantPoolNames
4129       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/ConstantPoolNames.jrag:12
4130       */
4131      @SuppressWarnings({"unchecked", "cast"})
4132      public String typeDescriptor() {
4133        if(typeDescriptor_computed) {
4134          return typeDescriptor_value;
4135        }
4136          ASTNode$State state = state();
4137      int num = state.boundariesCrossed;
4138      boolean isFinal = this.is$Final();
4139        typeDescriptor_value = typeDescriptor_compute();
4140      if(isFinal && num == state().boundariesCrossed){ typeDescriptor_computed = true; }
4141            return typeDescriptor_value;
4142      }
4143      /**
4144       * @apilevel internal
4145       */
4146      private String typeDescriptor_compute() {
4147        throw new Error("Can not compute typeDescriptor for " + getClass().getName());
4148      }
4149      /**
4150       * @apilevel internal
4151       */
4152      protected boolean hasClinit_computed = false;
4153      /**
4154       * @apilevel internal
4155       */
4156      protected boolean hasClinit_value;
4157      /**
4158       * @attribute syn
4159       * @aspect CreateBCode
4160       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:26
4161       */
4162      @SuppressWarnings({"unchecked", "cast"})
4163      public boolean hasClinit() {
4164        if(hasClinit_computed) {
4165          return hasClinit_value;
4166        }
4167          ASTNode$State state = state();
4168      int num = state.boundariesCrossed;
4169      boolean isFinal = this.is$Final();
4170        hasClinit_value = hasClinit_compute();
4171      if(isFinal && num == state().boundariesCrossed){ hasClinit_computed = true; }
4172            return hasClinit_value;
4173      }
4174      /**
4175       * @apilevel internal
4176       */
4177      private boolean hasClinit_compute() {
4178        for(int i = 0; i < getNumBodyDecl(); i++) {
4179          BodyDecl b = getBodyDecl(i);
4180          if(b instanceof FieldDeclaration) {
4181            FieldDeclaration f = (FieldDeclaration)b;
4182            if(f.isStatic() && f.hasInit()) {
4183              return true;
4184            }
4185          }
4186          else if(b instanceof StaticInitializer) {
4187            return true;
4188          }
4189        }
4190        return false;
4191      }
4192      protected java.util.Map bytecodes_ConstantPool_values;
4193      /**
4194       * @attribute syn
4195       * @aspect CreateBCode
4196       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:42
4197       */
4198      @SuppressWarnings({"unchecked", "cast"})
4199      public CodeGeneration bytecodes(ConstantPool constantPool) {
4200        Object _parameters = constantPool;
4201        if(bytecodes_ConstantPool_values == null) bytecodes_ConstantPool_values = new java.util.HashMap(4);
4202        if(bytecodes_ConstantPool_values.containsKey(_parameters)) {
4203          return (CodeGeneration)bytecodes_ConstantPool_values.get(_parameters);
4204        }
4205          ASTNode$State state = state();
4206      int num = state.boundariesCrossed;
4207      boolean isFinal = this.is$Final();
4208        CodeGeneration bytecodes_ConstantPool_value = bytecodes_compute(constantPool);
4209      if(isFinal && num == state().boundariesCrossed){ bytecodes_ConstantPool_values.put(_parameters, bytecodes_ConstantPool_value); }
4210            return bytecodes_ConstantPool_value;
4211      }
4212      /**
4213       * @apilevel internal
4214       */
4215      private CodeGeneration bytecodes_compute(ConstantPool constantPool) {
4216        CodeGeneration gen = new CodeGeneration(constantPool);
4217        generateBytecodes(gen);
4218        if(!gen.numberFormatError())
4219          return gen;
4220        gen = new CodeGeneration(constantPool, true);
4221        generateBytecodes(gen);
4222        if(!gen.numberFormatError())
4223          return gen;
4224        throw new Error("Could not generate code for initializers in " + hostType().typeName());
4225      }
4226      /**
4227       * @attribute syn
4228       * @aspect CreateBCode
4229       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:469
4230       */
4231      public boolean needsAccessorFor(Variable v) {
4232        ASTNode$State state = state();
4233        try {
4234        if(!(v instanceof FieldDeclaration))
4235          return false;
4236        FieldDeclaration f = (FieldDeclaration)v;
4237        if(f.isConstant() && (f.type().isPrimitive() || f.type().isString()))
4238          return false;
4239        return f.isPrivate() && !hasField(v.name());
4240      }
4241        finally {
4242        }
4243      }
4244      /**
4245       * @attribute syn
4246       * @aspect CreateBCode
4247       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:820
4248       */
4249      public String arrayTypeDescriptor() {
4250        ASTNode$State state = state();
4251        try { throw new Error("Operation not supported"); }
4252        finally {
4253        }
4254      }
4255      /**
4256       * @attribute syn
4257       * @aspect CreateBCode
4258       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:825
4259       */
4260      public int arrayPrimitiveTypeDescriptor() {
4261        ASTNode$State state = state();
4262        try { error(); return -1; }
4263        finally {
4264        }
4265      }
4266      /**
4267       * @apilevel internal
4268       */
4269      protected boolean flags_computed = false;
4270      /**
4271       * @apilevel internal
4272       */
4273      protected int flags_value;
4274      /**
4275       * @attribute syn
4276       * @aspect Flags
4277       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Flags.jrag:64
4278       */
4279      @SuppressWarnings({"unchecked", "cast"})
4280      public int flags() {
4281        if(flags_computed) {
4282          return flags_value;
4283        }
4284          ASTNode$State state = state();
4285      int num = state.boundariesCrossed;
4286      boolean isFinal = this.is$Final();
4287        flags_value = flags_compute();
4288      if(isFinal && num == state().boundariesCrossed){ flags_computed = true; }
4289            return flags_value;
4290      }
4291      /**
4292       * @apilevel internal
4293       */
4294      private int flags_compute() {
4295        int res = 0;
4296        if(isPublic()) res |= Modifiers.ACC_PUBLIC;
4297        if(isPrivate()) res |= Modifiers.ACC_PRIVATE;
4298        if(isProtected()) res |= Modifiers.ACC_PROTECTED;
4299        if(isStatic()) res |= Modifiers.ACC_STATIC;
4300        if(isFinal()) res |= Modifiers.ACC_FINAL;
4301        // ACC_INTERFACE handled in InterfaceDecl
4302        if(isAbstract()) res |= Modifiers.ACC_ABSTRACT;
4303        return res;
4304      }
4305      /**
4306       * @attribute syn
4307       * @aspect GenerateClassfile
4308       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:34
4309       */
4310      public int magicHeader() {
4311        ASTNode$State state = state();
4312        try {  return 0xCAFEBABE;  }
4313        finally {
4314        }
4315      }
4316      /**
4317       * @attribute syn
4318       * @aspect GenerateClassfile
4319       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:35
4320       */
4321      public int minorVersion() {
4322        ASTNode$State state = state();
4323        try {  return 0;  }
4324        finally {
4325        }
4326      }
4327      /**
4328       * @attribute syn
4329       * @aspect GenerateClassfile
4330       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:36
4331       */
4332      public int majorVersion() {
4333        ASTNode$State state = state();
4334        try {
4335        return 49;
4336      }
4337        finally {
4338        }
4339      }
4340      /**
4341       * @apilevel internal
4342       */
4343      protected boolean bcFields_computed = false;
4344      /**
4345       * @apilevel internal
4346       */
4347      protected Collection bcFields_value;
4348      /**
4349       * @attribute syn
4350       * @aspect GenerateClassfile
4351       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:275
4352       */
4353      @SuppressWarnings({"unchecked", "cast"})
4354      public Collection bcFields() {
4355        if(bcFields_computed) {
4356          return bcFields_value;
4357        }
4358          ASTNode$State state = state();
4359      int num = state.boundariesCrossed;
4360      boolean isFinal = this.is$Final();
4361        bcFields_value = bcFields_compute();
4362      if(isFinal && num == state().boundariesCrossed){ bcFields_computed = true; }
4363            return bcFields_value;
4364      }
4365      /**
4366       * @apilevel internal
4367       */
4368      private Collection bcFields_compute() {  return new ArrayList();  }
4369      /**
4370       * @attribute syn
4371       * @aspect GenerateClassfile
4372       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:325
4373       */
4374      public boolean flush() {
4375        ASTNode$State state = state();
4376        try {  return false;  }
4377        finally {
4378        }
4379      }
4380      /**
4381       * @attribute syn
4382       * @aspect InnerClasses
4383       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:82
4384       */
4385      public TypeDecl stringPromotion() {
4386        ASTNode$State state = state();
4387        try {  return this;  }
4388        finally {
4389        }
4390      }
4391      /**
4392       * @attribute syn
4393       * @aspect InnerClasses
4394       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:94
4395       */
4396      public MethodDecl methodWithArgs(String name, TypeDecl[] args) {
4397        ASTNode$State state = state();
4398        try {
4399        for(Iterator iter = memberMethods(name).iterator(); iter.hasNext(); ) {
4400          MethodDecl m = (MethodDecl)iter.next();
4401          if(m.getNumParameter() == args.length) {
4402            for(int i = 0; i < args.length; i++)
4403              if(m.getParameter(i).type() == args[i])
4404                return m;
4405          }
4406        }
4407        return null;
4408      }
4409        finally {
4410        }
4411      }
4412      /**
4413       * @apilevel internal
4414       */
4415      protected boolean enclosingVariables_computed = false;
4416      /**
4417       * @apilevel internal
4418       */
4419      protected Collection enclosingVariables_value;
4420      /**
4421       * @attribute syn
4422       * @aspect InnerClasses
4423       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:145
4424       */
4425      @SuppressWarnings({"unchecked", "cast"})
4426      public Collection enclosingVariables() {
4427        if(enclosingVariables_computed) {
4428          return enclosingVariables_value;
4429        }
4430          ASTNode$State state = state();
4431      int num = state.boundariesCrossed;
4432      boolean isFinal = this.is$Final();
4433        enclosingVariables_value = enclosingVariables_compute();
4434      if(isFinal && num == state().boundariesCrossed){ enclosingVariables_computed = true; }
4435            return enclosingVariables_value;
4436      }
4437      /**
4438       * @apilevel internal
4439       */
4440      private Collection enclosingVariables_compute() {
4441        HashSet set = new HashSet();
4442        for(TypeDecl e = this; e != null; e = e.enclosingType())
4443          if(e.isLocalClass() || e.isAnonymous())
4444            collectEnclosingVariables(set, e.enclosingType());
4445        if(isClassDecl()) {
4446          ClassDecl classDecl = (ClassDecl)this;
4447          if(classDecl.isNestedType() && classDecl.hasSuperclass())
4448            set.addAll(classDecl.superclass().enclosingVariables());
4449        }
4450        return set;
4451      }
4452      /**
4453       * @attribute syn
4454       * @aspect InnerClasses
4455       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:394
4456       */
4457      public boolean isAnonymousInNonStaticContext() {
4458        ASTNode$State state = state();
4459        try {
4460        return isAnonymous() && 
4461               !((ClassInstanceExpr)getParent().getParent()).unqualifiedScope().inStaticContext()
4462               && (!inExplicitConstructorInvocation() || enclosingBodyDecl().hostType().isInnerType());
4463      }
4464        finally {
4465        }
4466      }
4467      /**
4468       * @attribute syn
4469       * @aspect InnerClasses
4470       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:400
4471       */
4472      public boolean needsEnclosing() {
4473        ASTNode$State state = state();
4474        try {
4475        if(isAnonymous())
4476          return isAnonymousInNonStaticContext();
4477        else if(isLocalClass())
4478          return !inStaticContext();
4479        else if(isInnerType())
4480          return true;
4481        return false;
4482      }
4483        finally {
4484        }
4485      }
4486      /**
4487       * @attribute syn
4488       * @aspect InnerClasses
4489       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:410
4490       */
4491      public boolean needsSuperEnclosing() {
4492        ASTNode$State state = state();
4493        try {
4494        if(!isAnonymous())
4495          return false;
4496        TypeDecl superClass = ((ClassDecl)this).superclass();
4497        if(superClass.isLocalClass())
4498          return !superClass.inStaticContext();
4499        else if(superClass.isInnerType())
4500          return true;
4501        if(needsEnclosing() && enclosing() == superEnclosing())
4502          return false;
4503        return false;
4504      }
4505        finally {
4506        }
4507      }
4508      /**
4509       * @attribute syn
4510       * @aspect InnerClasses
4511       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:422
4512       */
4513      public TypeDecl enclosing() {
4514        ASTNode$State state = state();
4515        try {
4516        if(!needsEnclosing())
4517          return null;
4518        TypeDecl typeDecl = enclosingType();
4519        if(isAnonymous() && inExplicitConstructorInvocation())
4520          typeDecl = typeDecl.enclosingType();
4521        return typeDecl;
4522      }
4523        finally {
4524        }
4525      }
4526      /**
4527       * @attribute syn
4528       * @aspect InnerClasses
4529       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:430
4530       */
4531      public TypeDecl superEnclosing() {
4532        ASTNode$State state = state();
4533        try {  return null;  }
4534        finally {
4535        }
4536      }
4537      /**
4538       * @apilevel internal
4539       */
4540      protected boolean uniqueIndex_computed = false;
4541      /**
4542       * @apilevel internal
4543       */
4544      protected int uniqueIndex_value;
4545      /**
4546       * @attribute syn
4547       * @aspect Java2Rewrites
4548       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:12
4549       */
4550      @SuppressWarnings({"unchecked", "cast"})
4551      public int uniqueIndex() {
4552        if(uniqueIndex_computed) {
4553          return uniqueIndex_value;
4554        }
4555          ASTNode$State state = state();
4556      int num = state.boundariesCrossed;
4557      boolean isFinal = this.is$Final();
4558        uniqueIndex_value = uniqueIndex_compute();
4559      if(isFinal && num == state().boundariesCrossed){ uniqueIndex_computed = true; }
4560            return uniqueIndex_value;
4561      }
4562      /**
4563       * @apilevel internal
4564       */
4565      private int uniqueIndex_compute() {  return topLevelType().uniqueIndexCounter++;  }
4566      /**
4567       * @apilevel internal
4568       */
4569      protected boolean jvmName_computed = false;
4570      /**
4571       * @apilevel internal
4572       */
4573      protected String jvmName_value;
4574      /**
4575       * @attribute syn
4576       * @aspect Java2Rewrites
4577       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:15
4578       */
4579      @SuppressWarnings({"unchecked", "cast"})
4580      public String jvmName() {
4581        if(jvmName_computed) {
4582          return jvmName_value;
4583        }
4584          ASTNode$State state = state();
4585      int num = state.boundariesCrossed;
4586      boolean isFinal = this.is$Final();
4587        jvmName_value = jvmName_compute();
4588      if(isFinal && num == state().boundariesCrossed){ jvmName_computed = true; }
4589            return jvmName_value;
4590      }
4591      /**
4592       * @apilevel internal
4593       */
4594      private String jvmName_compute() {
4595        throw new Error("Jvm name only supported for reference types and not " + getClass().getName());
4596      }
4597      /**
4598       * @attribute syn
4599       * @aspect Java2Rewrites
4600       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:44
4601       */
4602      public String primitiveClassName() {
4603        ASTNode$State state = state();
4604        try {
4605        throw new Error("primitiveClassName not supported for " + name() + " of type " + getClass().getName());
4606      }
4607        finally {
4608        }
4609      }
4610      /**
4611       * @attribute syn
4612       * @aspect Java2Rewrites
4613       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Java2Rewrites.jrag:57
4614       */
4615      public String referenceClassFieldName() {
4616        ASTNode$State state = state();
4617        try {
4618        throw new Error("referenceClassFieldName not supported for " + name() + " of type " + getClass().getName());
4619      }
4620        finally {
4621        }
4622      }
4623      /**
4624       * @attribute syn
4625       * @aspect LocalNum
4626       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:124
4627       */
4628      public int variableSize() {
4629        ASTNode$State state = state();
4630        try {  return 0;  }
4631        finally {
4632        }
4633      }
4634      /* It is a compile-time error if the return type of a method declared in an
4635      annotation type is any type other than one of the following: one of the
4636      primitive types, String, Class and any invocation of Class, an enum type
4637      (\ufffd8.9), an annotation type, or an array (\ufffd10) of one of the preceding types.* @attribute syn
4638       * @aspect Annotations
4639       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:121
4640       */
4641      public boolean isValidAnnotationMethodReturnType() {
4642        ASTNode$State state = state();
4643        try {  return false;  }
4644        finally {
4645        }
4646      }
4647      /**
4648       * @attribute syn
4649       * @aspect Annotations
4650       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:225
4651       */
4652      public Annotation annotation(TypeDecl typeDecl) {
4653        ASTNode$State state = state();
4654        try {  return getModifiers().annotation(typeDecl);  }
4655        finally {
4656        }
4657      }
4658      /**
4659       * @attribute syn
4660       * @aspect Annotations
4661       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:282
4662       */
4663      public boolean hasAnnotationSuppressWarnings(String s) {
4664        ASTNode$State state = state();
4665        try {  return getModifiers().hasAnnotationSuppressWarnings(s);  }
4666        finally {
4667        }
4668      }
4669      /**
4670       * @attribute syn
4671       * @aspect Annotations
4672       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:321
4673       */
4674      public boolean isDeprecated() {
4675        ASTNode$State state = state();
4676        try {  return getModifiers().hasDeprecatedAnnotation();  }
4677        finally {
4678        }
4679      }
4680      /* An element type T is commensurate with an element value V if and only if one of the following conditions is true:
4681        * T is an array type E[] and either:
4682              o V is an ElementValueArrayInitializer and each ElementValueInitializer (analogous to a variable initializer in an array initializer) in V is commensurate with E. Or
4683              o V is an ElementValue that is commensurate with T. 
4684        * The type of V is assignment compatible (\ufffd5.2) with T and, furthermore:
4685              o If T is a primitive type or String, V is a constant expression (\ufffd15.28).
4686              o V is not null.
4687              o if T is Class, or an invocation of Class, and V is a class literal (\ufffd15.8.2).
4688              o If T is an enum type, and V is an enum constant. * @attribute syn
4689       * @aspect Annotations
4690       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:474
4691       */
4692      public boolean commensurateWith(ElementValue value) {
4693        ASTNode$State state = state();
4694        try {  return value.commensurateWithTypeDecl(this);  }
4695        finally {
4696        }
4697      }
4698      /**
4699       * @attribute syn
4700       * @aspect Annotations
4701       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:545
4702       */
4703      public boolean isAnnotationDecl() {
4704        ASTNode$State state = state();
4705        try {  return false;  }
4706        finally {
4707        }
4708      }
4709      /* NumericTypes, BooleanTypes
4710         TypeChecking (ensure that an expression of a certain type is valid in a particular context)
4711         TypeComputation (compute the type of an expression)
4712         CodeGeneration (output code including implicit type conversions and promotions)
4713    
4714         NumericTypes:
4715           binaryNumericPromotion, unaryNumericPromotion, assignmentConversion, methodInvocationConversion, castingConversion
4716           numeric operations that do not use these kinds of conversions and promotions explicitly need to be refined
4717         BooleanTypes:
4718           assignmentConversion, methodInvocationConversion, castingConversion
4719           
4720      * @attribute syn
4721       * @aspect AutoBoxing
4722       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/AutoBoxing.jrag:31
4723       */
4724      public boolean boxingConversionTo(TypeDecl typeDecl) {
4725        ASTNode$State state = state();
4726        try {  return false;  }
4727        finally {
4728        }
4729      }
4730      /**
4731       * @apilevel internal
4732       */
4733      protected boolean boxed_computed = false;
4734      /**
4735       * @apilevel internal
4736       */
4737      protected TypeDecl boxed_value;
4738      /**
4739       * @attribute syn
4740       * @aspect AutoBoxing
4741       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/AutoBoxing.jrag:35
4742       */
4743      @SuppressWarnings({"unchecked", "cast"})
4744      public TypeDecl boxed() {
4745        if(boxed_computed) {
4746          return boxed_value;
4747        }
4748          ASTNode$State state = state();
4749      int num = state.boundariesCrossed;
4750      boolean isFinal = this.is$Final();
4751        boxed_value = boxed_compute();
4752      if(isFinal && num == state().boundariesCrossed){ boxed_computed = true; }
4753            return boxed_value;
4754      }
4755      /**
4756       * @apilevel internal
4757       */
4758      private TypeDecl boxed_compute() {  return unknownType();  }
4759      /**
4760       * @attribute syn
4761       * @aspect AutoBoxing
4762       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/AutoBoxing.jrag:47
4763       */
4764      public boolean unboxingConversionTo(TypeDecl typeDecl) {
4765        ASTNode$State state = state();
4766        try {  return false;  }
4767        finally {
4768        }
4769      }
4770      /**
4771       * @apilevel internal
4772       */
4773      protected boolean unboxed_computed = false;
4774      /**
4775       * @apilevel internal
4776       */
4777      protected TypeDecl unboxed_value;
4778      /**
4779       * @attribute syn
4780       * @aspect AutoBoxing
4781       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/AutoBoxing.jrag:51
4782       */
4783      @SuppressWarnings({"unchecked", "cast"})
4784      public TypeDecl unboxed() {
4785        if(unboxed_computed) {
4786          return unboxed_value;
4787        }
4788          ASTNode$State state = state();
4789      int num = state.boundariesCrossed;
4790      boolean isFinal = this.is$Final();
4791        unboxed_value = unboxed_compute();
4792      if(isFinal && num == state().boundariesCrossed){ unboxed_computed = true; }
4793            return unboxed_value;
4794      }
4795      /**
4796       * @apilevel internal
4797       */
4798      private TypeDecl unboxed_compute() {  return unknownType();  }
4799      /**
4800       * @apilevel internal
4801       */
4802      protected boolean isIterable_computed = false;
4803      /**
4804       * @apilevel internal
4805       */
4806      protected boolean isIterable_value;
4807      /**
4808      * True if type is java.lang.Iterable or subtype
4809        As long as we use the 1.4 API we check for java.util.Collection instead.
4810      * @attribute syn
4811       * @aspect EnhancedFor
4812       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/EnhancedFor.jrag:35
4813       */
4814      @SuppressWarnings({"unchecked", "cast"})
4815      public boolean isIterable() {
4816        if(isIterable_computed) {
4817          return isIterable_value;
4818        }
4819          ASTNode$State state = state();
4820      int num = state.boundariesCrossed;
4821      boolean isFinal = this.is$Final();
4822        isIterable_value = isIterable_compute();
4823      if(isFinal && num == state().boundariesCrossed){ isIterable_computed = true; }
4824            return isIterable_value;
4825      }
4826      /**
4827       * @apilevel internal
4828       */
4829      private boolean isIterable_compute() {  return instanceOf(lookupType("java.lang", "Iterable"));  }
4830      /* 
4831         1) It is a compile-time error to attempt to explicitly instantiate an enum type
4832         (\ufffd15.9.1).
4833      * @attribute syn
4834       * @aspect Enums
4835       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Enums.jrag:16
4836       */
4837      public boolean isEnumDecl() {
4838        ASTNode$State state = state();
4839        try {  return false;  }
4840        finally {
4841        }
4842      }
4843      /**
4844       * @attribute syn
4845       * @aspect GenericMethodsInference
4846       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericMethodsInference.jrag:13
4847       */
4848      public boolean isUnboxedPrimitive() {
4849        ASTNode$State state = state();
4850        try {  return this instanceof PrimitiveType && isPrimitive();  }
4851        finally {
4852        }
4853      }
4854      /**
4855       * @apilevel internal
4856       */
4857      protected int involvesTypeParameters_visited = -1;
4858      /**
4859       * @apilevel internal
4860       */
4861      protected boolean involvesTypeParameters_computed = false;
4862      /**
4863       * @apilevel internal
4864       */
4865      protected boolean involvesTypeParameters_initialized = false;
4866      /**
4867       * @apilevel internal
4868       */
4869      protected boolean involvesTypeParameters_value;
4870      /**
4871       * @attribute syn
4872       * @aspect GenericMethodsInference
4873       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericMethodsInference.jrag:15
4874       */
4875      @SuppressWarnings({"unchecked", "cast"})
4876      public boolean involvesTypeParameters() {
4877        if(involvesTypeParameters_computed) {
4878          return involvesTypeParameters_value;
4879        }
4880        ASTNode$State state = state();
4881        if (!involvesTypeParameters_initialized) {
4882          involvesTypeParameters_initialized = true;
4883          involvesTypeParameters_value = false;
4884        }
4885        if (!state.IN_CIRCLE) {
4886          state.IN_CIRCLE = true;
4887        int num = state.boundariesCrossed;
4888        boolean isFinal = this.is$Final();
4889          do {
4890            involvesTypeParameters_visited = state.CIRCLE_INDEX;
4891            state.CHANGE = false;
4892            boolean new_involvesTypeParameters_value = involvesTypeParameters_compute();
4893            if (new_involvesTypeParameters_value!=involvesTypeParameters_value)
4894              state.CHANGE = true;
4895            involvesTypeParameters_value = new_involvesTypeParameters_value; 
4896            state.CIRCLE_INDEX++;
4897          } while (state.CHANGE);
4898            if(isFinal && num == state().boundariesCrossed) {
4899          involvesTypeParameters_computed = true;
4900          }
4901          else {
4902          state.RESET_CYCLE = true;
4903          involvesTypeParameters_compute();
4904          state.RESET_CYCLE = false;
4905            involvesTypeParameters_computed = false;
4906            involvesTypeParameters_initialized = false;
4907          }
4908          state.IN_CIRCLE = false; 
4909              return involvesTypeParameters_value;
4910        }
4911        if(involvesTypeParameters_visited != state.CIRCLE_INDEX) {
4912          involvesTypeParameters_visited = state.CIRCLE_INDEX;
4913          if (state.RESET_CYCLE) {
4914            involvesTypeParameters_computed = false;
4915            involvesTypeParameters_initialized = false;
4916            involvesTypeParameters_visited = -1;
4917                return involvesTypeParameters_value;
4918          }
4919          boolean new_involvesTypeParameters_value = involvesTypeParameters_compute();
4920          if (new_involvesTypeParameters_value!=involvesTypeParameters_value)
4921            state.CHANGE = true;
4922          involvesTypeParameters_value = new_involvesTypeParameters_value; 
4923              return involvesTypeParameters_value;
4924        }
4925            return involvesTypeParameters_value;
4926      }
4927      /**
4928       * @apilevel internal
4929       */
4930      private boolean involvesTypeParameters_compute() {  return false;  }
4931      /**
4932       * @attribute syn
4933       * @aspect Generics
4934       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:179
4935       */
4936      public boolean isGenericType() {
4937        ASTNode$State state = state();
4938        try {  return false;  }
4939        finally {
4940        }
4941      }
4942      /**
4943       * @attribute syn
4944       * @aspect Generics
4945       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:253
4946       */
4947      public boolean isParameterizedType() {
4948        ASTNode$State state = state();
4949        try {  return false;  }
4950        finally {
4951        }
4952      }
4953      /**
4954       * @attribute syn
4955       * @aspect Generics
4956       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:256
4957       */
4958      public boolean isRawType() {
4959        ASTNode$State state = state();
4960        try {  return isNestedType() && enclosingType().isRawType();  }
4961        finally {
4962        }
4963      }
4964      /**
4965       * @apilevel internal
4966       */
4967      protected boolean erasure_computed = false;
4968      /**
4969       * @apilevel internal
4970       */
4971      protected TypeDecl erasure_value;
4972      /**
4973       * @attribute syn
4974       * @aspect GenericsErasure
4975       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:343
4976       */
4977      @SuppressWarnings({"unchecked", "cast"})
4978      public TypeDecl erasure() {
4979        if(erasure_computed) {
4980          return erasure_value;
4981        }
4982          ASTNode$State state = state();
4983      int num = state.boundariesCrossed;
4984      boolean isFinal = this.is$Final();
4985        erasure_value = erasure_compute();
4986      if(isFinal && num == state().boundariesCrossed){ erasure_computed = true; }
4987            return erasure_value;
4988      }
4989      /**
4990       * @apilevel internal
4991       */
4992      private TypeDecl erasure_compute() {
4993        if(isAnonymous() || isLocalClass())
4994          return this;
4995        if(!isNestedType())
4996          return this;
4997        return extractSingleType(enclosingType().erasure().memberTypes(name()));
4998      }
4999      /**
5000       * @apilevel internal
5001       */
5002      protected boolean implementedInterfaces_computed = false;
5003      /**
5004       * @apilevel internal
5005       */
5006      protected HashSet implementedInterfaces_value;
5007      /**
5008       * @attribute syn
5009       * @aspect GenericsTypeCheck
5010       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:399
5011       */
5012      @SuppressWarnings({"unchecked", "cast"})
5013      public HashSet implementedInterfaces() {
5014        if(implementedInterfaces_computed) {
5015          return implementedInterfaces_value;
5016        }
5017          ASTNode$State state = state();
5018      int num = state.boundariesCrossed;
5019      boolean isFinal = this.is$Final();
5020        implementedInterfaces_value = implementedInterfaces_compute();
5021      if(isFinal && num == state().boundariesCrossed){ implementedInterfaces_computed = true; }
5022            return implementedInterfaces_value;
5023      }
5024      /**
5025       * @apilevel internal
5026       */
5027      private HashSet implementedInterfaces_compute() {  return new HashSet();  }
5028      /**
5029       * @attribute syn
5030       * @aspect LookupParTypeDecl
5031       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:571
5032       */
5033      public boolean sameSignature(Access a) {
5034        ASTNode$State state = state();
5035        try {
5036        if(a instanceof ParTypeAccess) return false;
5037        if(a instanceof AbstractWildcard) return false;
5038        return this == a.type();
5039      }
5040        finally {
5041        }
5042      }
5043      /**
5044       * @apilevel internal
5045       */
5046      protected int usesTypeVariable_visited = -1;
5047      /**
5048       * @apilevel internal
5049       */
5050      protected boolean usesTypeVariable_computed = false;
5051      /**
5052       * @apilevel internal
5053       */
5054      protected boolean usesTypeVariable_initialized = false;
5055      /**
5056       * @apilevel internal
5057       */
5058      protected boolean usesTypeVariable_value;
5059      /**
5060       * @attribute syn
5061       * @aspect LookupParTypeDecl
5062       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1068
5063       */
5064      @SuppressWarnings({"unchecked", "cast"})
5065      public boolean usesTypeVariable() {
5066        if(usesTypeVariable_computed) {
5067          return usesTypeVariable_value;
5068        }
5069        ASTNode$State state = state();
5070        if (!usesTypeVariable_initialized) {
5071          usesTypeVariable_initialized = true;
5072          usesTypeVariable_value = false;
5073        }
5074        if (!state.IN_CIRCLE) {
5075          state.IN_CIRCLE = true;
5076        int num = state.boundariesCrossed;
5077        boolean isFinal = this.is$Final();
5078          do {
5079            usesTypeVariable_visited = state.CIRCLE_INDEX;
5080            state.CHANGE = false;
5081            boolean new_usesTypeVariable_value = usesTypeVariable_compute();
5082            if (new_usesTypeVariable_value!=usesTypeVariable_value)
5083              state.CHANGE = true;
5084            usesTypeVariable_value = new_usesTypeVariable_value; 
5085            state.CIRCLE_INDEX++;
5086          } while (state.CHANGE);
5087            if(isFinal && num == state().boundariesCrossed) {
5088          usesTypeVariable_computed = true;
5089          }
5090          else {
5091          state.RESET_CYCLE = true;
5092          usesTypeVariable_compute();
5093          state.RESET_CYCLE = false;
5094            usesTypeVariable_computed = false;
5095            usesTypeVariable_initialized = false;
5096          }
5097          state.IN_CIRCLE = false; 
5098              return usesTypeVariable_value;
5099        }
5100        if(usesTypeVariable_visited != state.CIRCLE_INDEX) {
5101          usesTypeVariable_visited = state.CIRCLE_INDEX;
5102          if (state.RESET_CYCLE) {
5103            usesTypeVariable_computed = false;
5104            usesTypeVariable_initialized = false;
5105            usesTypeVariable_visited = -1;
5106                return usesTypeVariable_value;
5107          }
5108          boolean new_usesTypeVariable_value = usesTypeVariable_compute();
5109          if (new_usesTypeVariable_value!=usesTypeVariable_value)
5110            state.CHANGE = true;
5111          usesTypeVariable_value = new_usesTypeVariable_value; 
5112              return usesTypeVariable_value;
5113        }
5114            return usesTypeVariable_value;
5115      }
5116      /**
5117       * @apilevel internal
5118       */
5119      private boolean usesTypeVariable_compute() {  return isNestedType() && enclosingType().usesTypeVariable();  }
5120      /**
5121       * @attribute syn
5122       * @aspect LookupParTypeDecl
5123       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1306
5124       */
5125      public TypeDecl original() {
5126        ASTNode$State state = state();
5127        try {  return this;  }
5128        finally {
5129        }
5130      }
5131      /**
5132       * @attribute syn
5133       * @aspect LookupParTypeDecl
5134       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1398
5135       */
5136      public TypeDecl asWildcardExtends() {
5137        ASTNode$State state = state();
5138        try {  return lookupWildcardExtends(this);  }
5139        finally {
5140        }
5141      }
5142      /**
5143       * @attribute syn
5144       * @aspect LookupParTypeDecl
5145       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1411
5146       */
5147      public TypeDecl asWildcardSuper() {
5148        ASTNode$State state = state();
5149        try {  return lookupWildcardSuper(this);  }
5150        finally {
5151        }
5152      }
5153      /**
5154       * @apilevel internal
5155       */
5156      protected boolean sourceTypeDecl_computed = false;
5157      /**
5158       * @apilevel internal
5159       */
5160      protected TypeDecl sourceTypeDecl_value;
5161      /**
5162       * @attribute syn
5163       * @aspect SourceDeclarations
5164       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1504
5165       */
5166      @SuppressWarnings({"unchecked", "cast"})
5167      public TypeDecl sourceTypeDecl() {
5168        if(sourceTypeDecl_computed) {
5169          return sourceTypeDecl_value;
5170        }
5171          ASTNode$State state = state();
5172      int num = state.boundariesCrossed;
5173      boolean isFinal = this.is$Final();
5174        sourceTypeDecl_value = sourceTypeDecl_compute();
5175      if(isFinal && num == state().boundariesCrossed){ sourceTypeDecl_computed = true; }
5176            return sourceTypeDecl_value;
5177      }
5178      /**
5179       * @apilevel internal
5180       */
5181      private TypeDecl sourceTypeDecl_compute() {  return this;  }
5182      /**
5183       * @attribute syn
5184       * @aspect GenericsParTypeDecl
5185       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsParTypeDecl.jrag:73
5186       */
5187      public boolean isTypeVariable() {
5188        ASTNode$State state = state();
5189        try {  return false;  }
5190        finally {
5191        }
5192      }
5193      /**
5194       * @attribute syn
5195       * @aspect GenericsSubtype
5196       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:14
5197       */
5198      public boolean supertypeGenericClassDecl(GenericClassDecl type) {
5199        ASTNode$State state = state();
5200        try {  return supertypeClassDecl(type);  }
5201        finally {
5202        }
5203      }
5204      /**
5205       * @attribute syn
5206       * @aspect GenericsSubtype
5207       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:20
5208       */
5209      public boolean supertypeGenericInterfaceDecl(GenericInterfaceDecl type) {
5210        ASTNode$State state = state();
5211        try {  return this == type || supertypeInterfaceDecl(type);  }
5212        finally {
5213        }
5214      }
5215      /**
5216       * @attribute syn
5217       * @aspect GenericsSubtype
5218       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:26
5219       */
5220      public boolean supertypeRawClassDecl(RawClassDecl type) {
5221        ASTNode$State state = state();
5222        try {  return supertypeParClassDecl(type);  }
5223        finally {
5224        }
5225      }
5226      /**
5227       * @attribute syn
5228       * @aspect GenericsSubtype
5229       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:30
5230       */
5231      public boolean supertypeRawInterfaceDecl(RawInterfaceDecl type) {
5232        ASTNode$State state = state();
5233        try {  return supertypeParInterfaceDecl(type);  }
5234        finally {
5235        }
5236      }
5237      /**
5238       * @attribute syn
5239       * @aspect GenericsSubtype
5240       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:46
5241       */
5242      public boolean supertypeWildcard(WildcardType type) {
5243        ASTNode$State state = state();
5244        try {  return false;  }
5245        finally {
5246        }
5247      }
5248      /**
5249       * @attribute syn
5250       * @aspect GenericsSubtype
5251       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:57
5252       */
5253      public boolean supertypeWildcardExtends(WildcardExtendsType type) {
5254        ASTNode$State state = state();
5255        try {  return false;  }
5256        finally {
5257        }
5258      }
5259      /**
5260       * @attribute syn
5261       * @aspect GenericsSubtype
5262       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:66
5263       */
5264      public boolean supertypeWildcardSuper(WildcardSuperType type) {
5265        ASTNode$State state = state();
5266        try {  return false;  }
5267        finally {
5268        }
5269      }
5270      /**
5271       * @attribute syn
5272       * @aspect GenericsSubtype
5273       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:102
5274       */
5275      public boolean isWildcard() {
5276        ASTNode$State state = state();
5277        try {  return false;  }
5278        finally {
5279        }
5280      }
5281      /**
5282       * @attribute syn
5283       * @aspect GenericsSubtype
5284       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:125
5285       */
5286      public boolean supertypeParClassDecl(ParClassDecl type) {
5287        ASTNode$State state = state();
5288        try {  return supertypeClassDecl(type);  }
5289        finally {
5290        }
5291      }
5292      /**
5293       * @attribute syn
5294       * @aspect GenericsSubtype
5295       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:129
5296       */
5297      public boolean supertypeParInterfaceDecl(ParInterfaceDecl type) {
5298        ASTNode$State state = state();
5299        try {  return supertypeInterfaceDecl(type);  }
5300        finally {
5301        }
5302      }
5303      protected java.util.Map containedIn_TypeDecl_values;
5304      /**
5305       * @attribute syn
5306       * @aspect GenericsSubtype
5307       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:141
5308       */
5309      @SuppressWarnings({"unchecked", "cast"})
5310      public boolean containedIn(TypeDecl type) {
5311        Object _parameters = type;
5312        if(containedIn_TypeDecl_values == null) containedIn_TypeDecl_values = new java.util.HashMap(4);
5313        ASTNode$State.CircularValue _value;
5314        if(containedIn_TypeDecl_values.containsKey(_parameters)) {
5315          Object _o = containedIn_TypeDecl_values.get(_parameters);
5316          if(!(_o instanceof ASTNode$State.CircularValue)) {
5317            return ((Boolean)_o).booleanValue();
5318          }
5319          else
5320            _value = (ASTNode$State.CircularValue)_o;
5321        }
5322        else {
5323          _value = new ASTNode$State.CircularValue();
5324          containedIn_TypeDecl_values.put(_parameters, _value);
5325          _value.value = Boolean.valueOf(true);
5326        }
5327        ASTNode$State state = state();
5328        if (!state.IN_CIRCLE) {
5329          state.IN_CIRCLE = true;
5330          int num = state.boundariesCrossed;
5331          boolean isFinal = this.is$Final();
5332          boolean new_containedIn_TypeDecl_value;
5333          do {
5334            _value.visited = new Integer(state.CIRCLE_INDEX);
5335            state.CHANGE = false;
5336            new_containedIn_TypeDecl_value = containedIn_compute(type);
5337            if (new_containedIn_TypeDecl_value!=((Boolean)_value.value).booleanValue()) {
5338              state.CHANGE = true;
5339              _value.value = Boolean.valueOf(new_containedIn_TypeDecl_value);
5340            }
5341            state.CIRCLE_INDEX++;
5342          } while (state.CHANGE);
5343            if(isFinal && num == state().boundariesCrossed) {
5344            containedIn_TypeDecl_values.put(_parameters, new_containedIn_TypeDecl_value);
5345          }
5346          else {
5347            containedIn_TypeDecl_values.remove(_parameters);
5348          state.RESET_CYCLE = true;
5349          containedIn_compute(type);
5350          state.RESET_CYCLE = false;
5351          }
5352          state.IN_CIRCLE = false; 
5353          return new_containedIn_TypeDecl_value;
5354        }
5355        if(!new Integer(state.CIRCLE_INDEX).equals(_value.visited)) {
5356          _value.visited = new Integer(state.CIRCLE_INDEX);
5357          boolean new_containedIn_TypeDecl_value = containedIn_compute(type);
5358          if (state.RESET_CYCLE) {
5359            containedIn_TypeDecl_values.remove(_parameters);
5360          }
5361          else if (new_containedIn_TypeDecl_value!=((Boolean)_value.value).booleanValue()) {
5362            state.CHANGE = true;
5363            _value.value = new_containedIn_TypeDecl_value;
5364          }
5365          return new_containedIn_TypeDecl_value;
5366        }
5367        return ((Boolean)_value.value).booleanValue();
5368      }
5369      /**
5370       * @apilevel internal
5371       */
5372      private boolean containedIn_compute(TypeDecl type) {
5373        if(type == this || type instanceof WildcardType) 
5374          return true;
5375        else if(type instanceof WildcardExtendsType)
5376          return this.subtype(((WildcardExtendsType)type).extendsType());
5377        else if(type instanceof WildcardSuperType)
5378          return ((WildcardSuperType)type).superType().subtype(this);
5379        else if(type instanceof TypeVariable)
5380          return subtype(type);
5381        return sameStructure(type);
5382        //return false;
5383      }
5384      protected java.util.Map sameStructure_TypeDecl_values;
5385      /**
5386       * @attribute syn
5387       * @aspect GenericsSubtype
5388       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:178
5389       */
5390      @SuppressWarnings({"unchecked", "cast"})
5391      public boolean sameStructure(TypeDecl t) {
5392        Object _parameters = t;
5393        if(sameStructure_TypeDecl_values == null) sameStructure_TypeDecl_values = new java.util.HashMap(4);
5394        ASTNode$State.CircularValue _value;
5395        if(sameStructure_TypeDecl_values.containsKey(_parameters)) {
5396          Object _o = sameStructure_TypeDecl_values.get(_parameters);
5397          if(!(_o instanceof ASTNode$State.CircularValue)) {
5398            return ((Boolean)_o).booleanValue();
5399          }
5400          else
5401            _value = (ASTNode$State.CircularValue)_o;
5402        }
5403        else {
5404          _value = new ASTNode$State.CircularValue();
5405          sameStructure_TypeDecl_values.put(_parameters, _value);
5406          _value.value = Boolean.valueOf(true);
5407        }
5408        ASTNode$State state = state();
5409        if (!state.IN_CIRCLE) {
5410          state.IN_CIRCLE = true;
5411          int num = state.boundariesCrossed;
5412          boolean isFinal = this.is$Final();
5413          boolean new_sameStructure_TypeDecl_value;
5414          do {
5415            _value.visited = new Integer(state.CIRCLE_INDEX);
5416            state.CHANGE = false;
5417            new_sameStructure_TypeDecl_value = sameStructure_compute(t);
5418            if (new_sameStructure_TypeDecl_value!=((Boolean)_value.value).booleanValue()) {
5419              state.CHANGE = true;
5420              _value.value = Boolean.valueOf(new_sameStructure_TypeDecl_value);
5421            }
5422            state.CIRCLE_INDEX++;
5423          } while (state.CHANGE);
5424            if(isFinal && num == state().boundariesCrossed) {
5425            sameStructure_TypeDecl_values.put(_parameters, new_sameStructure_TypeDecl_value);
5426          }
5427          else {
5428            sameStructure_TypeDecl_values.remove(_parameters);
5429          state.RESET_CYCLE = true;
5430          sameStructure_compute(t);
5431          state.RESET_CYCLE = false;
5432          }
5433          state.IN_CIRCLE = false; 
5434          return new_sameStructure_TypeDecl_value;
5435        }
5436        if(!new Integer(state.CIRCLE_INDEX).equals(_value.visited)) {
5437          _value.visited = new Integer(state.CIRCLE_INDEX);
5438          boolean new_sameStructure_TypeDecl_value = sameStructure_compute(t);
5439          if (state.RESET_CYCLE) {
5440            sameStructure_TypeDecl_values.remove(_parameters);
5441          }
5442          else if (new_sameStructure_TypeDecl_value!=((Boolean)_value.value).booleanValue()) {
5443            state.CHANGE = true;
5444            _value.value = new_sameStructure_TypeDecl_value;
5445          }
5446          return new_sameStructure_TypeDecl_value;
5447        }
5448        return ((Boolean)_value.value).booleanValue();
5449      }
5450      /**
5451       * @apilevel internal
5452       */
5453      private boolean sameStructure_compute(TypeDecl t) {  return t == this;  }
5454      /**
5455       * @attribute syn
5456       * @aspect GenericsSubtype
5457       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:291
5458       */
5459      public boolean supertypeTypeVariable(TypeVariable type) {
5460        ASTNode$State state = state();
5461        try {
5462        if(type == this)
5463          return true;
5464        for(int i = 0; i < type.getNumTypeBound(); i++)
5465          if(type.getTypeBound(i).type().subtype(this))
5466            return true;
5467        return false;
5468      }
5469        finally {
5470        }
5471      }
5472      /**
5473       * @attribute syn
5474       * @aspect GenericsSubtype
5475       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:347
5476       */
5477      public boolean supertypeLUBType(LUBType type) {
5478        ASTNode$State state = state();
5479        try {
5480        for(int i = 0; i < type.getNumTypeBound(); i++)
5481          if(!type.getTypeBound(i).type().subtype(this))
5482            return false;
5483        return true;
5484      }
5485        finally {
5486        }
5487      }
5488      /**
5489       * @attribute syn
5490       * @aspect GenericsSubtype
5491       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:366
5492       */
5493      public boolean supertypeGLBType(GLBType type) {
5494        ASTNode$State state = state();
5495        try {
5496        // T1 && .. && Tn <: this, if exists  0 < i <= n Ti <: this 
5497        for(int i = 0; i < type.getNumTypeBound(); i++)
5498          if(type.getTypeBound(i).type().subtype(this))
5499            return true;
5500        return false;
5501      }
5502        finally {
5503        }
5504      }
5505      protected java.util.Map subtype_TypeDecl_values;
5506      /**
5507       * @attribute syn
5508       * @aspect GenericsSubtype
5509       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:405
5510       */
5511      @SuppressWarnings({"unchecked", "cast"})
5512      public boolean subtype(TypeDecl type) {
5513        Object _parameters = type;
5514        if(subtype_TypeDecl_values == null) subtype_TypeDecl_values = new java.util.HashMap(4);
5515        ASTNode$State.CircularValue _value;
5516        if(subtype_TypeDecl_values.containsKey(_parameters)) {
5517          Object _o = subtype_TypeDecl_values.get(_parameters);
5518          if(!(_o instanceof ASTNode$State.CircularValue)) {
5519            return ((Boolean)_o).booleanValue();
5520          }
5521          else
5522            _value = (ASTNode$State.CircularValue)_o;
5523        }
5524        else {
5525          _value = new ASTNode$State.CircularValue();
5526          subtype_TypeDecl_values.put(_parameters, _value);
5527          _value.value = Boolean.valueOf(true);
5528        }
5529        ASTNode$State state = state();
5530        if (!state.IN_CIRCLE) {
5531          state.IN_CIRCLE = true;
5532          int num = state.boundariesCrossed;
5533          boolean isFinal = this.is$Final();
5534          boolean new_subtype_TypeDecl_value;
5535          do {
5536            _value.visited = new Integer(state.CIRCLE_INDEX);
5537            state.CHANGE = false;
5538            new_subtype_TypeDecl_value = subtype_compute(type);
5539            if (new_subtype_TypeDecl_value!=((Boolean)_value.value).booleanValue()) {
5540              state.CHANGE = true;
5541              _value.value = Boolean.valueOf(new_subtype_TypeDecl_value);
5542            }
5543            state.CIRCLE_INDEX++;
5544          } while (state.CHANGE);
5545            if(isFinal && num == state().boundariesCrossed) {
5546            subtype_TypeDecl_values.put(_parameters, new_subtype_TypeDecl_value);
5547          }
5548          else {
5549            subtype_TypeDecl_values.remove(_parameters);
5550          state.RESET_CYCLE = true;
5551          subtype_compute(type);
5552          state.RESET_CYCLE = false;
5553          }
5554          state.IN_CIRCLE = false; 
5555          return new_subtype_TypeDecl_value;
5556        }
5557        if(!new Integer(state.CIRCLE_INDEX).equals(_value.visited)) {
5558          _value.visited = new Integer(state.CIRCLE_INDEX);
5559          boolean new_subtype_TypeDecl_value = subtype_compute(type);
5560          if (state.RESET_CYCLE) {
5561            subtype_TypeDecl_values.remove(_parameters);
5562          }
5563          else if (new_subtype_TypeDecl_value!=((Boolean)_value.value).booleanValue()) {
5564            state.CHANGE = true;
5565            _value.value = new_subtype_TypeDecl_value;
5566          }
5567          return new_subtype_TypeDecl_value;
5568        }
5569        return ((Boolean)_value.value).booleanValue();
5570      }
5571      /**
5572       * @apilevel internal
5573       */
5574      private boolean subtype_compute(TypeDecl type) {  return type == this;  }
5575      /**
5576       * @attribute syn
5577       * @aspect GenericsSubtype
5578       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:421
5579       */
5580      public boolean supertypeClassDecl(ClassDecl type) {
5581        ASTNode$State state = state();
5582        try {  return type == this;  }
5583        finally {
5584        }
5585      }
5586      /**
5587       * @attribute syn
5588       * @aspect GenericsSubtype
5589       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:437
5590       */
5591      public boolean supertypeInterfaceDecl(InterfaceDecl type) {
5592        ASTNode$State state = state();
5593        try {  return type == this;  }
5594        finally {
5595        }
5596      }
5597      /**
5598       * @attribute syn
5599       * @aspect GenericsSubtype
5600       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:450
5601       */
5602      public boolean supertypeArrayDecl(ArrayDecl type) {
5603        ASTNode$State state = state();
5604        try {  return this == type;  }
5605        finally {
5606        }
5607      }
5608      /**
5609       * @attribute syn
5610       * @aspect GenericsSubtype
5611       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:472
5612       */
5613      public boolean supertypePrimitiveType(PrimitiveType type) {
5614        ASTNode$State state = state();
5615        try {  return type == this;  }
5616        finally {
5617        }
5618      }
5619      /**
5620       * @attribute syn
5621       * @aspect GenericsSubtype
5622       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:479
5623       */
5624      public boolean supertypeNullType(NullType type) {
5625        ASTNode$State state = state();
5626        try {  return false;  }
5627        finally {
5628        }
5629      }
5630      /**
5631       * @attribute syn
5632       * @aspect GenericsSubtype
5633       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:483
5634       */
5635      public boolean supertypeVoidType(VoidType type) {
5636        ASTNode$State state = state();
5637        try {  return false;  }
5638        finally {
5639        }
5640      }
5641      /**
5642       * @attribute syn
5643       * @aspect GenericsSubtype
5644       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:493
5645       */
5646      public boolean supertypeClassDeclSubstituted(ClassDeclSubstituted type) {
5647        ASTNode$State state = state();
5648        try {  return type.original() == this || supertypeClassDecl(type);  }
5649        finally {
5650        }
5651      }
5652      /**
5653       * @attribute syn
5654       * @aspect GenericsSubtype
5655       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:503
5656       */
5657      public boolean supertypeInterfaceDeclSubstituted(InterfaceDeclSubstituted type) {
5658        ASTNode$State state = state();
5659        try {  return type.original() == this || supertypeInterfaceDecl(type);  }
5660        finally {
5661        }
5662      }
5663      /**
5664       * @attribute syn
5665       * @aspect GenericsSubtype
5666       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:513
5667       */
5668      public boolean supertypeGenericClassDeclSubstituted(GenericClassDeclSubstituted type) {
5669        ASTNode$State state = state();
5670        try {  return type.original() == this || supertypeGenericClassDecl(type);  }
5671        finally {
5672        }
5673      }
5674      /**
5675       * @attribute syn
5676       * @aspect GenericsSubtype
5677       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsSubtype.jrag:523
5678       */
5679      public boolean supertypeGenericInterfaceDeclSubstituted(GenericInterfaceDeclSubstituted type) {
5680        ASTNode$State state = state();
5681        try {  return type.original() == this || supertypeGenericInterfaceDecl(type);  }
5682        finally {
5683        }
5684      }
5685      protected java.util.Map createEnumMethod_TypeDecl_values;
5686      /**
5687       * @attribute syn
5688       * @aspect EnumsCodegen
5689       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/EnumsCodegen.jrag:42
5690       */
5691      @SuppressWarnings({"unchecked", "cast"})
5692      public MethodDecl createEnumMethod(TypeDecl enumDecl) {
5693        Object _parameters = enumDecl;
5694        if(createEnumMethod_TypeDecl_values == null) createEnumMethod_TypeDecl_values = new java.util.HashMap(4);
5695        if(createEnumMethod_TypeDecl_values.containsKey(_parameters)) {
5696          return (MethodDecl)createEnumMethod_TypeDecl_values.get(_parameters);
5697        }
5698          ASTNode$State state = state();
5699      int num = state.boundariesCrossed;
5700      boolean isFinal = this.is$Final();
5701        MethodDecl createEnumMethod_TypeDecl_value = createEnumMethod_compute(enumDecl);
5702      if(isFinal && num == state().boundariesCrossed){ createEnumMethod_TypeDecl_values.put(_parameters, createEnumMethod_TypeDecl_value); }
5703            return createEnumMethod_TypeDecl_value;
5704      }
5705      /**
5706       * @apilevel internal
5707       */
5708      private MethodDecl createEnumMethod_compute(TypeDecl enumDecl) {
5709        MethodDecl m = new MethodDecl(
5710          new Modifiers(new List().add(new Modifier("static")).add(new Modifier("final")).add(new Modifier("private"))),
5711          typeInt().arrayType().createQualifiedAccess(),
5712          "$SwitchMap$" + enumDecl.fullName().replace('.', '$'),
5713          new List(),
5714          new List(),
5715          new Opt(
5716            new Block(
5717              new List().add(
5718                new IfStmt(
5719                  new EQExpr(
5720                    createEnumArray(enumDecl).createBoundFieldAccess(),
5721                    new NullLiteral("null")
5722                  ),
5723                  AssignExpr.asStmt(
5724                    createEnumArray(enumDecl).createBoundFieldAccess(),
5725                    new ArrayCreationExpr(
5726                      new ArrayTypeWithSizeAccess(
5727                        typeInt().createQualifiedAccess(),
5728                        enumDecl.createQualifiedAccess().qualifiesAccess(
5729                            new MethodAccess("values", new List())).qualifiesAccess(
5730                            new VarAccess("length"))
5731                      ),
5732                      new Opt()
5733                    )
5734                  ),
5735                  new Opt()
5736                )
5737              ).add(
5738                new ReturnStmt(
5739                  createEnumArray(enumDecl).createBoundFieldAccess()
5740                )
5741              )
5742            )
5743          )
5744        );
5745        // add method declaration as a body declaration
5746        getBodyDeclList().insertChild(m, 1);
5747        // trigger possible rewrites
5748        return (MethodDecl)getBodyDeclList().getChild(1);
5749      }
5750      protected java.util.Map createEnumIndex_EnumConstant_values;
5751      /**
5752       * @attribute syn
5753       * @aspect EnumsCodegen
5754       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/EnumsCodegen.jrag:86
5755       */
5756      @SuppressWarnings({"unchecked", "cast"})
5757      public int createEnumIndex(EnumConstant e) {
5758        Object _parameters = e;
5759        if(createEnumIndex_EnumConstant_values == null) createEnumIndex_EnumConstant_values = new java.util.HashMap(4);
5760        if(createEnumIndex_EnumConstant_values.containsKey(_parameters)) {
5761          return ((Integer)createEnumIndex_EnumConstant_values.get(_parameters)).intValue();
5762        }
5763          ASTNode$State state = state();
5764      int num = state.boundariesCrossed;
5765      boolean isFinal = this.is$Final();
5766        int createEnumIndex_EnumConstant_value = createEnumIndex_compute(e);
5767      if(isFinal && num == state().boundariesCrossed){ createEnumIndex_EnumConstant_values.put(_parameters, Integer.valueOf(createEnumIndex_EnumConstant_value)); }
5768            return createEnumIndex_EnumConstant_value;
5769      }
5770      /**
5771       * @apilevel internal
5772       */
5773      private int createEnumIndex_compute(EnumConstant e) {
5774        if(createEnumIndexMap == null)
5775          createEnumIndexMap = new HashMap();
5776        if(!createEnumIndexMap.containsKey(e.hostType()))
5777          createEnumIndexMap.put(e.hostType(), new Integer(0));
5778        Integer i = (Integer)createEnumIndexMap.get(e.hostType());
5779        i = new Integer(i.intValue() + 1);
5780        createEnumIndexMap.put(e.hostType(), i);
5781    
5782        MethodDecl m = createEnumMethod(e.hostType());
5783        List list = m.getBlock().getStmtList();
5784        list.insertChild(
5785          new TryStmt(
5786            new Block(
5787              new List().add(
5788                AssignExpr.asStmt(
5789                  createEnumArray(e.hostType()).createBoundFieldAccess().qualifiesAccess(
5790                    new ArrayAccess(
5791                      e.createBoundFieldAccess().qualifiesAccess(new MethodAccess("ordinal", new List()))
5792                    )
5793                  ),
5794                  Literal.buildIntegerLiteral(i.intValue())
5795                )
5796              )
5797            ),
5798            new List().add(
5799              new BasicCatch(
5800                new ParameterDeclaration(
5801                  lookupType("java.lang", "NoSuchFieldError").createQualifiedAccess(),
5802                  "e"
5803                ),
5804                new Block(
5805                  new List()
5806                )
5807              )
5808            ),
5809            new Opt()
5810          ),
5811          list.getNumChild()-1
5812        );
5813        return i.intValue();
5814      }
5815      protected java.util.Map createEnumArray_TypeDecl_values;
5816      /**
5817       * @attribute syn
5818       * @aspect EnumsCodegen
5819       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/EnumsCodegen.jrag:129
5820       */
5821      @SuppressWarnings({"unchecked", "cast"})
5822      public FieldDeclaration createEnumArray(TypeDecl enumDecl) {
5823        Object _parameters = enumDecl;
5824        if(createEnumArray_TypeDecl_values == null) createEnumArray_TypeDecl_values = new java.util.HashMap(4);
5825        if(createEnumArray_TypeDecl_values.containsKey(_parameters)) {
5826          return (FieldDeclaration)createEnumArray_TypeDecl_values.get(_parameters);
5827        }
5828          ASTNode$State state = state();
5829      int num = state.boundariesCrossed;
5830      boolean isFinal = this.is$Final();
5831        FieldDeclaration createEnumArray_TypeDecl_value = createEnumArray_compute(enumDecl);
5832      if(isFinal && num == state().boundariesCrossed){ createEnumArray_TypeDecl_values.put(_parameters, createEnumArray_TypeDecl_value); }
5833            return createEnumArray_TypeDecl_value;
5834      }
5835      /**
5836       * @apilevel internal
5837       */
5838      private FieldDeclaration createEnumArray_compute(TypeDecl enumDecl) {
5839        FieldDeclaration f = new FieldDeclaration(
5840          new Modifiers(new List().add(new Modifier("static")).add(new Modifier("final")).add(new Modifier("private"))),
5841          typeInt().arrayType().createQualifiedAccess(),
5842          "$SwitchMap$" + enumDecl.fullName().replace('.', '$'),
5843          new Opt()
5844        );
5845        // add field declaration as a body declaration
5846        getBodyDeclList().insertChild(f, 0);
5847        // trigger possible rewrites
5848        return (FieldDeclaration)getBodyDeclList().getChild(0);
5849      }
5850      /**
5851       * @attribute syn
5852       * @aspect GenericsCodegen
5853       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:227
5854       */
5855      public SimpleSet bridgeCandidates(String signature) {
5856        ASTNode$State state = state();
5857        try {  return SimpleSet.emptySet;  }
5858        finally {
5859        }
5860      }
5861      /**
5862       * @apilevel internal
5863       */
5864      protected boolean needsSignatureAttribute_computed = false;
5865      /**
5866       * @apilevel internal
5867       */
5868      protected boolean needsSignatureAttribute_value;
5869      /**
5870       * @attribute syn
5871       * @aspect GenericsCodegen
5872       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:339
5873       */
5874      @SuppressWarnings({"unchecked", "cast"})
5875      public boolean needsSignatureAttribute() {
5876        if(needsSignatureAttribute_computed) {
5877          return needsSignatureAttribute_value;
5878        }
5879          ASTNode$State state = state();
5880      int num = state.boundariesCrossed;
5881      boolean isFinal = this.is$Final();
5882        needsSignatureAttribute_value = needsSignatureAttribute_compute();
5883      if(isFinal && num == state().boundariesCrossed){ needsSignatureAttribute_computed = true; }
5884            return needsSignatureAttribute_value;
5885      }
5886      /**
5887       * @apilevel internal
5888       */
5889      private boolean needsSignatureAttribute_compute() {  return false;  }
5890      /**
5891       * @apilevel internal
5892       */
5893      protected boolean classSignature_computed = false;
5894      /**
5895       * @apilevel internal
5896       */
5897      protected String classSignature_value;
5898      /**
5899       * @attribute syn
5900       * @aspect GenericsCodegen
5901       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:384
5902       */
5903      @SuppressWarnings({"unchecked", "cast"})
5904      public String classSignature() {
5905        if(classSignature_computed) {
5906          return classSignature_value;
5907        }
5908          ASTNode$State state = state();
5909      int num = state.boundariesCrossed;
5910      boolean isFinal = this.is$Final();
5911        classSignature_value = classSignature_compute();
5912      if(isFinal && num == state().boundariesCrossed){ classSignature_computed = true; }
5913            return classSignature_value;
5914      }
5915      /**
5916       * @apilevel internal
5917       */
5918      private String classSignature_compute() {  return "";  }
5919      /**
5920       * @apilevel internal
5921       */
5922      protected boolean fieldTypeSignature_computed = false;
5923      /**
5924       * @apilevel internal
5925       */
5926      protected String fieldTypeSignature_value;
5927      /**
5928       * @attribute syn
5929       * @aspect GenericsCodegen
5930       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:443
5931       */
5932      @SuppressWarnings({"unchecked", "cast"})
5933      public String fieldTypeSignature() {
5934        if(fieldTypeSignature_computed) {
5935          return fieldTypeSignature_value;
5936        }
5937          ASTNode$State state = state();
5938      int num = state.boundariesCrossed;
5939      boolean isFinal = this.is$Final();
5940        fieldTypeSignature_value = fieldTypeSignature_compute();
5941      if(isFinal && num == state().boundariesCrossed){ fieldTypeSignature_computed = true; }
5942            return fieldTypeSignature_value;
5943      }
5944      /**
5945       * @apilevel internal
5946       */
5947      private String fieldTypeSignature_compute() {  return classTypeSignature();  }
5948      /**
5949       * @apilevel internal
5950       */
5951      protected boolean classTypeSignature_computed = false;
5952      /**
5953       * @apilevel internal
5954       */
5955      protected String classTypeSignature_value;
5956      /**
5957       * @attribute syn
5958       * @aspect GenericsCodegen
5959       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:452
5960       */
5961      @SuppressWarnings({"unchecked", "cast"})
5962      public String classTypeSignature() {
5963        if(classTypeSignature_computed) {
5964          return classTypeSignature_value;
5965        }
5966          ASTNode$State state = state();
5967      int num = state.boundariesCrossed;
5968      boolean isFinal = this.is$Final();
5969        classTypeSignature_value = classTypeSignature_compute();
5970      if(isFinal && num == state().boundariesCrossed){ classTypeSignature_computed = true; }
5971            return classTypeSignature_value;
5972      }
5973      /**
5974       * @apilevel internal
5975       */
5976      private String classTypeSignature_compute() {  return "L" + classTypeSignatureContents() + ";";  }
5977      /**
5978       * @attribute syn
5979       * @aspect GenericsCodegen
5980       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:458
5981       */
5982      public String classTypeSignatureContents() {
5983        ASTNode$State state = state();
5984        try {
5985        StringBuffer buf = new StringBuffer();
5986        if(isTopLevelType()) {
5987          if(!packageName().equals(""))
5988            buf.append(packageName().replace('.', '/') + "/");
5989        }
5990        else
5991          buf.append(enclosingType().classTypeSignatureContents() + ".");
5992        buf.append(name());
5993        buf.append(typeArgumentsOpt());
5994        return buf.toString();
5995      }
5996        finally {
5997        }
5998      }
5999      /**
6000       * @attribute syn
6001       * @aspect GenericsCodegen
6002       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:470
6003       */
6004      public String typeArgumentsOpt() {
6005        ASTNode$State state = state();
6006        try {  return "";  }
6007        finally {
6008        }
6009      }
6010      /**
6011      * @return true if the modifier list includes the SafeVarargs annotation
6012      * @attribute syn
6013       * @aspect SafeVarargs
6014       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SafeVarargs.jrag:14
6015       */
6016      public boolean hasAnnotationSafeVarargs() {
6017        ASTNode$State state = state();
6018        try {  return getModifiers().hasAnnotationSafeVarargs();  }
6019        finally {
6020        }
6021      }
6022      /**
6023      * A type is reifiable if it either refers to a non-parameterized type,
6024      * is a raw type, is a parameterized type with only unbound wildcard
6025      * parameters or is an array type with a reifiable type parameter.
6026      *
6027      * @see "JLSv3 &sect;4.7"
6028      * @attribute syn
6029       * @aspect SafeVarargs
6030       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SafeVarargs.jrag:106
6031       */
6032      public boolean isReifiable() {
6033        ASTNode$State state = state();
6034        try {  return true;  }
6035        finally {
6036        }
6037      }
6038      /**
6039       * An unchecked conversion occurs when converting from a
6040       * raw type G to a generic type G<T1, ..., Tn>.
6041       * @attribute syn
6042       * @aspect UncheckedConversion
6043       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/UncheckedConversion.jrag:50
6044       */
6045      public boolean isUncheckedConversionTo(TypeDecl dest) {
6046        ASTNode$State state = state();
6047        try {  return (!dest.isRawType()) && this.isRawType();  }
6048        finally {
6049        }
6050      }
6051      /**
6052       * @apilevel internal
6053       */
6054      protected boolean componentType_computed = false;
6055      /**
6056       * @apilevel internal
6057       */
6058      protected TypeDecl componentType_value;
6059      /**
6060       * @attribute inh
6061       * @aspect Arrays
6062       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Arrays.jrag:21
6063       */
6064      @SuppressWarnings({"unchecked", "cast"})
6065      public TypeDecl componentType() {
6066        if(componentType_computed) {
6067          return componentType_value;
6068        }
6069          ASTNode$State state = state();
6070      int num = state.boundariesCrossed;
6071      boolean isFinal = this.is$Final();
6072        componentType_value = getParent().Define_TypeDecl_componentType(this, null);
6073      if(isFinal && num == state().boundariesCrossed){ componentType_computed = true; }
6074            return componentType_value;
6075      }
6076      /**
6077       * @attribute inh
6078       * @aspect Arrays
6079       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Arrays.jrag:50
6080       */
6081      @SuppressWarnings({"unchecked", "cast"})
6082      public TypeDecl typeCloneable() {
6083          ASTNode$State state = state();
6084        TypeDecl typeCloneable_value = getParent().Define_TypeDecl_typeCloneable(this, null);
6085            return typeCloneable_value;
6086      }
6087      /**
6088       * @attribute inh
6089       * @aspect Arrays
6090       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Arrays.jrag:51
6091       */
6092      @SuppressWarnings({"unchecked", "cast"})
6093      public TypeDecl typeSerializable() {
6094          ASTNode$State state = state();
6095        TypeDecl typeSerializable_value = getParent().Define_TypeDecl_typeSerializable(this, null);
6096            return typeSerializable_value;
6097      }
6098      /**
6099       * @attribute inh
6100       * @aspect ClassPath
6101       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ClassPath.jrag:31
6102       */
6103      @SuppressWarnings({"unchecked", "cast"})
6104      public CompilationUnit compilationUnit() {
6105          ASTNode$State state = state();
6106        CompilationUnit compilationUnit_value = getParent().Define_CompilationUnit_compilationUnit(this, null);
6107            return compilationUnit_value;
6108      }
6109      protected java.util.Map isDAbefore_Variable_values;
6110      /**
6111       * @attribute inh
6112       * @aspect DA
6113       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:240
6114       */
6115      @SuppressWarnings({"unchecked", "cast"})
6116      public boolean isDAbefore(Variable v) {
6117        Object _parameters = v;
6118        if(isDAbefore_Variable_values == null) isDAbefore_Variable_values = new java.util.HashMap(4);
6119        if(isDAbefore_Variable_values.containsKey(_parameters)) {
6120          return ((Boolean)isDAbefore_Variable_values.get(_parameters)).booleanValue();
6121        }
6122          ASTNode$State state = state();
6123      int num = state.boundariesCrossed;
6124      boolean isFinal = this.is$Final();
6125        boolean isDAbefore_Variable_value = getParent().Define_boolean_isDAbefore(this, null, v);
6126      if(isFinal && num == state().boundariesCrossed){ isDAbefore_Variable_values.put(_parameters, Boolean.valueOf(isDAbefore_Variable_value)); }
6127            return isDAbefore_Variable_value;
6128      }
6129      protected java.util.Map isDUbefore_Variable_values;
6130      /**
6131       * @attribute inh
6132       * @aspect DU
6133       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:705
6134       */
6135      @SuppressWarnings({"unchecked", "cast"})
6136      public boolean isDUbefore(Variable v) {
6137        Object _parameters = v;
6138        if(isDUbefore_Variable_values == null) isDUbefore_Variable_values = new java.util.HashMap(4);
6139        if(isDUbefore_Variable_values.containsKey(_parameters)) {
6140          return ((Boolean)isDUbefore_Variable_values.get(_parameters)).booleanValue();
6141        }
6142          ASTNode$State state = state();
6143      int num = state.boundariesCrossed;
6144      boolean isFinal = this.is$Final();
6145        boolean isDUbefore_Variable_value = getParent().Define_boolean_isDUbefore(this, null, v);
6146      if(isFinal && num == state().boundariesCrossed){ isDUbefore_Variable_values.put(_parameters, Boolean.valueOf(isDUbefore_Variable_value)); }
6147            return isDUbefore_Variable_value;
6148      }
6149      /**
6150       * @apilevel internal
6151       */
6152      protected boolean typeException_computed = false;
6153      /**
6154       * @apilevel internal
6155       */
6156      protected TypeDecl typeException_value;
6157      /**
6158       * @attribute inh
6159       * @aspect ExceptionHandling
6160       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:14
6161       */
6162      @SuppressWarnings({"unchecked", "cast"})
6163      public TypeDecl typeException() {
6164        if(typeException_computed) {
6165          return typeException_value;
6166        }
6167          ASTNode$State state = state();
6168      int num = state.boundariesCrossed;
6169      boolean isFinal = this.is$Final();
6170        typeException_value = getParent().Define_TypeDecl_typeException(this, null);
6171      if(isFinal && num == state().boundariesCrossed){ typeException_computed = true; }
6172            return typeException_value;
6173      }
6174      /**
6175       * @apilevel internal
6176       */
6177      protected boolean typeRuntimeException_computed = false;
6178      /**
6179       * @apilevel internal
6180       */
6181      protected TypeDecl typeRuntimeException_value;
6182      /**
6183       * @attribute inh
6184       * @aspect ExceptionHandling
6185       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:16
6186       */
6187      @SuppressWarnings({"unchecked", "cast"})
6188      public TypeDecl typeRuntimeException() {
6189        if(typeRuntimeException_computed) {
6190          return typeRuntimeException_value;
6191        }
6192          ASTNode$State state = state();
6193      int num = state.boundariesCrossed;
6194      boolean isFinal = this.is$Final();
6195        typeRuntimeException_value = getParent().Define_TypeDecl_typeRuntimeException(this, null);
6196      if(isFinal && num == state().boundariesCrossed){ typeRuntimeException_computed = true; }
6197            return typeRuntimeException_value;
6198      }
6199      /**
6200       * @apilevel internal
6201       */
6202      protected boolean typeError_computed = false;
6203      /**
6204       * @apilevel internal
6205       */
6206      protected TypeDecl typeError_value;
6207      /**
6208       * @attribute inh
6209       * @aspect ExceptionHandling
6210       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:18
6211       */
6212      @SuppressWarnings({"unchecked", "cast"})
6213      public TypeDecl typeError() {
6214        if(typeError_computed) {
6215          return typeError_value;
6216        }
6217          ASTNode$State state = state();
6218      int num = state.boundariesCrossed;
6219      boolean isFinal = this.is$Final();
6220        typeError_value = getParent().Define_TypeDecl_typeError(this, null);
6221      if(isFinal && num == state().boundariesCrossed){ typeError_computed = true; }
6222            return typeError_value;
6223      }
6224      protected java.util.Map lookupMethod_String_values;
6225      /**
6226       * @attribute inh
6227       * @aspect LookupMethod
6228       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:26
6229       */
6230      @SuppressWarnings({"unchecked", "cast"})
6231      public Collection lookupMethod(String name) {
6232        Object _parameters = name;
6233        if(lookupMethod_String_values == null) lookupMethod_String_values = new java.util.HashMap(4);
6234        if(lookupMethod_String_values.containsKey(_parameters)) {
6235          return (Collection)lookupMethod_String_values.get(_parameters);
6236        }
6237          ASTNode$State state = state();
6238      int num = state.boundariesCrossed;
6239      boolean isFinal = this.is$Final();
6240        Collection lookupMethod_String_value = getParent().Define_Collection_lookupMethod(this, null, name);
6241      if(isFinal && num == state().boundariesCrossed){ lookupMethod_String_values.put(_parameters, lookupMethod_String_value); }
6242            return lookupMethod_String_value;
6243      }
6244      /**
6245       * @attribute inh
6246       * @aspect SpecialClasses
6247       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:62
6248       */
6249      @SuppressWarnings({"unchecked", "cast"})
6250      public TypeDecl typeInt() {
6251          ASTNode$State state = state();
6252        TypeDecl typeInt_value = getParent().Define_TypeDecl_typeInt(this, null);
6253            return typeInt_value;
6254      }
6255      /**
6256       * @apilevel internal
6257       */
6258      protected boolean typeObject_computed = false;
6259      /**
6260       * @apilevel internal
6261       */
6262      protected TypeDecl typeObject_value;
6263      /**
6264       * @attribute inh
6265       * @aspect SpecialClasses
6266       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:65
6267       */
6268      @SuppressWarnings({"unchecked", "cast"})
6269      public TypeDecl typeObject() {
6270        if(typeObject_computed) {
6271          return typeObject_value;
6272        }
6273          ASTNode$State state = state();
6274      int num = state.boundariesCrossed;
6275      boolean isFinal = this.is$Final();
6276        typeObject_value = getParent().Define_TypeDecl_typeObject(this, null);
6277      if(isFinal && num == state().boundariesCrossed){ typeObject_computed = true; }
6278            return typeObject_value;
6279      }
6280      /**
6281       * @attribute inh
6282       * @aspect LookupFullyQualifiedTypes
6283       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:98
6284       */
6285      @SuppressWarnings({"unchecked", "cast"})
6286      public TypeDecl lookupType(String packageName, String typeName) {
6287          ASTNode$State state = state();
6288        TypeDecl lookupType_String_String_value = getParent().Define_TypeDecl_lookupType(this, null, packageName, typeName);
6289            return lookupType_String_String_value;
6290      }
6291      protected java.util.Map lookupType_String_values;
6292      /**
6293       * @attribute inh
6294       * @aspect TypeScopePropagation
6295       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:260
6296       */
6297      @SuppressWarnings({"unchecked", "cast"})
6298      public SimpleSet lookupType(String name) {
6299        Object _parameters = name;
6300        if(lookupType_String_values == null) lookupType_String_values = new java.util.HashMap(4);
6301        if(lookupType_String_values.containsKey(_parameters)) {
6302          return (SimpleSet)lookupType_String_values.get(_parameters);
6303        }
6304          ASTNode$State state = state();
6305      int num = state.boundariesCrossed;
6306      boolean isFinal = this.is$Final();
6307        SimpleSet lookupType_String_value = getParent().Define_SimpleSet_lookupType(this, null, name);
6308      if(isFinal && num == state().boundariesCrossed){ lookupType_String_values.put(_parameters, lookupType_String_value); }
6309            return lookupType_String_value;
6310      }
6311      protected java.util.Map lookupVariable_String_values;
6312      /**
6313       * @attribute inh
6314       * @aspect VariableScope
6315       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:14
6316       */
6317      @SuppressWarnings({"unchecked", "cast"})
6318      public SimpleSet lookupVariable(String name) {
6319        Object _parameters = name;
6320        if(lookupVariable_String_values == null) lookupVariable_String_values = new java.util.HashMap(4);
6321        if(lookupVariable_String_values.containsKey(_parameters)) {
6322          return (SimpleSet)lookupVariable_String_values.get(_parameters);
6323        }
6324          ASTNode$State state = state();
6325      int num = state.boundariesCrossed;
6326      boolean isFinal = this.is$Final();
6327        SimpleSet lookupVariable_String_value = getParent().Define_SimpleSet_lookupVariable(this, null, name);
6328      if(isFinal && num == state().boundariesCrossed){ lookupVariable_String_values.put(_parameters, lookupVariable_String_value); }
6329            return lookupVariable_String_value;
6330      }
6331      /**
6332       * @attribute inh
6333       * @aspect NameCheck
6334       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:242
6335       */
6336      @SuppressWarnings({"unchecked", "cast"})
6337      public boolean hasPackage(String packageName) {
6338          ASTNode$State state = state();
6339        boolean hasPackage_String_value = getParent().Define_boolean_hasPackage(this, null, packageName);
6340            return hasPackage_String_value;
6341      }
6342      /**
6343       * @attribute inh
6344       * @aspect NameCheck
6345       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:245
6346       */
6347      @SuppressWarnings({"unchecked", "cast"})
6348      public ASTNode enclosingBlock() {
6349          ASTNode$State state = state();
6350        ASTNode enclosingBlock_value = getParent().Define_ASTNode_enclosingBlock(this, null);
6351            return enclosingBlock_value;
6352      }
6353      /**
6354       * @apilevel internal
6355       */
6356      protected boolean packageName_computed = false;
6357      /**
6358       * @apilevel internal
6359       */
6360      protected String packageName_value;
6361      /**
6362       * @attribute inh
6363       * @aspect TypeName
6364       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:89
6365       */
6366      @SuppressWarnings({"unchecked", "cast"})
6367      public String packageName() {
6368        if(packageName_computed) {
6369          return packageName_value;
6370        }
6371          ASTNode$State state = state();
6372      int num = state.boundariesCrossed;
6373      boolean isFinal = this.is$Final();
6374        packageName_value = getParent().Define_String_packageName(this, null);
6375      if(isFinal && num == state().boundariesCrossed){ packageName_computed = true; }
6376            return packageName_value;
6377      }
6378      /**
6379       * @apilevel internal
6380       */
6381      protected boolean isAnonymous_computed = false;
6382      /**
6383       * @apilevel internal
6384       */
6385      protected boolean isAnonymous_value;
6386      /**
6387       * @attribute inh
6388       * @aspect TypeAnalysis
6389       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:216
6390       */
6391      @SuppressWarnings({"unchecked", "cast"})
6392      public boolean isAnonymous() {
6393        if(isAnonymous_computed) {
6394          return isAnonymous_value;
6395        }
6396          ASTNode$State state = state();
6397      int num = state.boundariesCrossed;
6398      boolean isFinal = this.is$Final();
6399        isAnonymous_value = getParent().Define_boolean_isAnonymous(this, null);
6400      if(isFinal && num == state().boundariesCrossed){ isAnonymous_computed = true; }
6401            return isAnonymous_value;
6402      }
6403      /**
6404       * @attribute inh
6405       * @aspect NestedTypes
6406       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:496
6407       */
6408      @SuppressWarnings({"unchecked", "cast"})
6409      public TypeDecl enclosingType() {
6410          ASTNode$State state = state();
6411        TypeDecl enclosingType_value = getParent().Define_TypeDecl_enclosingType(this, null);
6412            return enclosingType_value;
6413      }
6414      /**
6415       * @attribute inh
6416       * @aspect NestedTypes
6417       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:512
6418       */
6419      @SuppressWarnings({"unchecked", "cast"})
6420      public BodyDecl enclosingBodyDecl() {
6421          ASTNode$State state = state();
6422        BodyDecl enclosingBodyDecl_value = getParent().Define_BodyDecl_enclosingBodyDecl(this, null);
6423            return enclosingBodyDecl_value;
6424      }
6425      /**
6426       * @attribute inh
6427       * @aspect NestedTypes
6428       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:518
6429       */
6430      @SuppressWarnings({"unchecked", "cast"})
6431      public boolean isNestedType() {
6432          ASTNode$State state = state();
6433        boolean isNestedType_value = getParent().Define_boolean_isNestedType(this, null);
6434            return isNestedType_value;
6435      }
6436      /**
6437       * @attribute inh
6438       * @aspect NestedTypes
6439       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:526
6440       */
6441      @SuppressWarnings({"unchecked", "cast"})
6442      public boolean isMemberType() {
6443          ASTNode$State state = state();
6444        boolean isMemberType_value = getParent().Define_boolean_isMemberType(this, null);
6445            return isMemberType_value;
6446      }
6447      /**
6448       * @attribute inh
6449       * @aspect NestedTypes
6450       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:540
6451       */
6452      @SuppressWarnings({"unchecked", "cast"})
6453      public boolean isLocalClass() {
6454          ASTNode$State state = state();
6455        boolean isLocalClass_value = getParent().Define_boolean_isLocalClass(this, null);
6456            return isLocalClass_value;
6457      }
6458      /**
6459       * @attribute inh
6460       * @aspect NestedTypes
6461       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:565
6462       */
6463      @SuppressWarnings({"unchecked", "cast"})
6464      public String hostPackage() {
6465          ASTNode$State state = state();
6466        String hostPackage_value = getParent().Define_String_hostPackage(this, null);
6467            return hostPackage_value;
6468      }
6469      /**
6470       * @apilevel internal
6471       */
6472      protected boolean unknownType_computed = false;
6473      /**
6474       * @apilevel internal
6475       */
6476      protected TypeDecl unknownType_value;
6477      /**
6478       * @attribute inh
6479       * @aspect Circularity
6480       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:675
6481       */
6482      @SuppressWarnings({"unchecked", "cast"})
6483      public TypeDecl unknownType() {
6484        if(unknownType_computed) {
6485          return unknownType_value;
6486        }
6487          ASTNode$State state = state();
6488      int num = state.boundariesCrossed;
6489      boolean isFinal = this.is$Final();
6490        unknownType_value = getParent().Define_TypeDecl_unknownType(this, null);
6491      if(isFinal && num == state().boundariesCrossed){ unknownType_computed = true; }
6492            return unknownType_value;
6493      }
6494      /**
6495       * @attribute inh
6496       * @aspect TypeCheck
6497       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:402
6498       */
6499      @SuppressWarnings({"unchecked", "cast"})
6500      public TypeDecl typeVoid() {
6501          ASTNode$State state = state();
6502        TypeDecl typeVoid_value = getParent().Define_TypeDecl_typeVoid(this, null);
6503            return typeVoid_value;
6504      }
6505      /**
6506       * @attribute inh
6507       * @aspect TypeCheck
6508       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:505
6509       */
6510      @SuppressWarnings({"unchecked", "cast"})
6511      public TypeDecl enclosingInstance() {
6512          ASTNode$State state = state();
6513        TypeDecl enclosingInstance_value = getParent().Define_TypeDecl_enclosingInstance(this, null);
6514            return enclosingInstance_value;
6515      }
6516      /**
6517       * @apilevel internal
6518       */
6519      protected boolean inExplicitConstructorInvocation_computed = false;
6520      /**
6521       * @apilevel internal
6522       */
6523      protected boolean inExplicitConstructorInvocation_value;
6524      /**
6525       * @attribute inh
6526       * @aspect TypeHierarchyCheck
6527       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:127
6528       */
6529      @SuppressWarnings({"unchecked", "cast"})
6530      public boolean inExplicitConstructorInvocation() {
6531        if(inExplicitConstructorInvocation_computed) {
6532          return inExplicitConstructorInvocation_value;
6533        }
6534          ASTNode$State state = state();
6535      int num = state.boundariesCrossed;
6536      boolean isFinal = this.is$Final();
6537        inExplicitConstructorInvocation_value = getParent().Define_boolean_inExplicitConstructorInvocation(this, null);
6538      if(isFinal && num == state().boundariesCrossed){ inExplicitConstructorInvocation_computed = true; }
6539            return inExplicitConstructorInvocation_value;
6540      }
6541      /**
6542       * @apilevel internal
6543       */
6544      protected boolean inStaticContext_computed = false;
6545      /**
6546       * @apilevel internal
6547       */
6548      protected boolean inStaticContext_value;
6549      /**
6550       * @attribute inh
6551       * @aspect TypeHierarchyCheck
6552       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:135
6553       */
6554      @SuppressWarnings({"unchecked", "cast"})
6555      public boolean inStaticContext() {
6556        if(inStaticContext_computed) {
6557          return inStaticContext_value;
6558        }
6559          ASTNode$State state = state();
6560      int num = state.boundariesCrossed;
6561      boolean isFinal = this.is$Final();
6562        inStaticContext_value = getParent().Define_boolean_inStaticContext(this, null);
6563      if(isFinal && num == state().boundariesCrossed){ inStaticContext_computed = true; }
6564            return inStaticContext_value;
6565      }
6566      /**
6567       * @apilevel internal
6568       */
6569      protected boolean destinationPath_computed = false;
6570      /**
6571       * @apilevel internal
6572       */
6573      protected String destinationPath_value;
6574      /**
6575       * @attribute inh
6576       * @aspect ConstantPoolNames
6577       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/ConstantPoolNames.jrag:64
6578       */
6579      @SuppressWarnings({"unchecked", "cast"})
6580      public String destinationPath() {
6581        if(destinationPath_computed) {
6582          return destinationPath_value;
6583        }
6584          ASTNode$State state = state();
6585      int num = state.boundariesCrossed;
6586      boolean isFinal = this.is$Final();
6587        destinationPath_value = getParent().Define_String_destinationPath(this, null);
6588      if(isFinal && num == state().boundariesCrossed){ destinationPath_computed = true; }
6589            return destinationPath_value;
6590      }
6591      /**
6592       * @attribute inh
6593       * @aspect Annotations
6594       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:280
6595       */
6596      @SuppressWarnings({"unchecked", "cast"})
6597      public boolean withinSuppressWarnings(String s) {
6598          ASTNode$State state = state();
6599        boolean withinSuppressWarnings_String_value = getParent().Define_boolean_withinSuppressWarnings(this, null, s);
6600            return withinSuppressWarnings_String_value;
6601      }
6602      /**
6603       * @attribute inh
6604       * @aspect Annotations
6605       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:379
6606       */
6607      @SuppressWarnings({"unchecked", "cast"})
6608      public boolean withinDeprecatedAnnotation() {
6609          ASTNode$State state = state();
6610        boolean withinDeprecatedAnnotation_value = getParent().Define_boolean_withinDeprecatedAnnotation(this, null);
6611            return withinDeprecatedAnnotation_value;
6612      }
6613      /**
6614       * @attribute inh
6615       * @aspect LookupParTypeDecl
6616       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1384
6617       */
6618      @SuppressWarnings({"unchecked", "cast"})
6619      public TypeDecl typeWildcard() {
6620          ASTNode$State state = state();
6621        TypeDecl typeWildcard_value = getParent().Define_TypeDecl_typeWildcard(this, null);
6622            return typeWildcard_value;
6623      }
6624      /**
6625       * @attribute inh
6626       * @aspect LookupParTypeDecl
6627       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1397
6628       */
6629      @SuppressWarnings({"unchecked", "cast"})
6630      public TypeDecl lookupWildcardExtends(TypeDecl typeDecl) {
6631          ASTNode$State state = state();
6632        TypeDecl lookupWildcardExtends_TypeDecl_value = getParent().Define_TypeDecl_lookupWildcardExtends(this, null, typeDecl);
6633            return lookupWildcardExtends_TypeDecl_value;
6634      }
6635      /**
6636       * @attribute inh
6637       * @aspect LookupParTypeDecl
6638       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1410
6639       */
6640      @SuppressWarnings({"unchecked", "cast"})
6641      public TypeDecl lookupWildcardSuper(TypeDecl typeDecl) {
6642          ASTNode$State state = state();
6643        TypeDecl lookupWildcardSuper_TypeDecl_value = getParent().Define_TypeDecl_lookupWildcardSuper(this, null, typeDecl);
6644            return lookupWildcardSuper_TypeDecl_value;
6645      }
6646      /**
6647       * @attribute inh
6648       * @aspect LookupParTypeDecl
6649       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1430
6650       */
6651      @SuppressWarnings({"unchecked", "cast"})
6652      public LUBType lookupLUBType(Collection bounds) {
6653          ASTNode$State state = state();
6654        LUBType lookupLUBType_Collection_value = getParent().Define_LUBType_lookupLUBType(this, null, bounds);
6655            return lookupLUBType_Collection_value;
6656      }
6657      /**
6658       * @attribute inh
6659       * @aspect LookupParTypeDecl
6660       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1468
6661       */
6662      @SuppressWarnings({"unchecked", "cast"})
6663      public GLBType lookupGLBType(ArrayList bounds) {
6664          ASTNode$State state = state();
6665        GLBType lookupGLBType_ArrayList_value = getParent().Define_GLBType_lookupGLBType(this, null, bounds);
6666            return lookupGLBType_ArrayList_value;
6667      }
6668      /**
6669       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Arrays.jrag:20
6670       * @apilevel internal
6671       */
6672      public TypeDecl Define_TypeDecl_componentType(ASTNode caller, ASTNode child) {
6673        if(caller == arrayType_value){
6674          return this;
6675        }
6676        else {      return getParent().Define_TypeDecl_componentType(this, caller);
6677        }
6678      }
6679      /**
6680       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:20
6681       * @apilevel internal
6682       */
6683      public boolean Define_boolean_isDest(ASTNode caller, ASTNode child) {
6684        if(caller == getBodyDeclListNoTransform())  {
6685        int childIndex = caller.getIndexOfChild(child);
6686        return false;
6687      }
6688        else {      return getParent().Define_boolean_isDest(this, caller);
6689        }
6690      }
6691      /**
6692       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:30
6693       * @apilevel internal
6694       */
6695      public boolean Define_boolean_isSource(ASTNode caller, ASTNode child) {
6696        if(caller == getBodyDeclListNoTransform())  {
6697        int childIndex = caller.getIndexOfChild(child);
6698        return true;
6699      }
6700        else {      return getParent().Define_boolean_isSource(this, caller);
6701        }
6702      }
6703      /**
6704       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:245
6705       * @apilevel internal
6706       */
6707      public boolean Define_boolean_isDAbefore(ASTNode caller, ASTNode child, Variable v) {
6708        if(caller == getBodyDeclListNoTransform())  { 
6709        int childIndex = caller.getIndexOfChild(child);
6710        {
6711        BodyDecl b = getBodyDecl(childIndex);
6712        //if(b instanceof MethodDecl || b instanceof MemberTypeDecl) {
6713        if(!v.isInstanceVariable() && !v.isClassVariable()) {
6714          if(v.hostType() != this)
6715            return isDAbefore(v);
6716          return false;
6717        }
6718        if(b instanceof FieldDeclaration && !((FieldDeclaration)b).isStatic() && v.isClassVariable())
6719          return true;
6720    
6721        if(b instanceof MethodDecl) {
6722          return true;
6723        }
6724        if(b instanceof MemberTypeDecl && v.isBlank() && v.isFinal() && v.hostType() == this)
6725          return true;
6726        if(v.isClassVariable() || v.isInstanceVariable()) {
6727          if(v.isFinal() &&  v.hostType() != this && instanceOf(v.hostType()))
6728            return true;
6729          int index = childIndex - 1;
6730          if(b instanceof ConstructorDecl)
6731            index = getNumBodyDecl() - 1;
6732            
6733          for(int i = index; i >= 0; i--) {
6734            b = getBodyDecl(i);
6735            if(b instanceof FieldDeclaration) {
6736              FieldDeclaration f = (FieldDeclaration)b;
6737              if((v.isClassVariable() && f.isStatic()) || (v.isInstanceVariable() && !f.isStatic())) {
6738                boolean c = f.isDAafter(v);
6739                //System.err.println("DefiniteAssignment: is " + v.name() + " DA after index " + i + ", " + f + ": " + c);
6740                return c;
6741                //return f.isDAafter(v);
6742              }
6743            }
6744            else if(b instanceof StaticInitializer && v.isClassVariable()) {
6745              StaticInitializer si = (StaticInitializer)b;
6746              return si.isDAafter(v);
6747            }
6748            else if(b instanceof InstanceInitializer && v.isInstanceVariable()) {
6749              InstanceInitializer ii = (InstanceInitializer)b;
6750              return ii.isDAafter(v);
6751            }
6752          }
6753        }
6754        return isDAbefore(v);
6755      }
6756      }
6757        else {      return getParent().Define_boolean_isDAbefore(this, caller, v);
6758        }
6759      }
6760      /**
6761       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:712
6762       * @apilevel internal
6763       */
6764      public boolean Define_boolean_isDUbefore(ASTNode caller, ASTNode child, Variable v) {
6765        if(caller == getBodyDeclListNoTransform())  { 
6766        int childIndex = caller.getIndexOfChild(child);
6767        {
6768        BodyDecl b = getBodyDecl(childIndex);
6769        if(b instanceof MethodDecl || b instanceof MemberTypeDecl) {
6770          return false;
6771        }
6772        if(v.isClassVariable() || v.isInstanceVariable()) {
6773          int index = childIndex - 1;
6774          if(b instanceof ConstructorDecl)
6775            index = getNumBodyDecl() - 1;
6776            
6777          for(int i = index; i >= 0; i--) {
6778            b = getBodyDecl(i);
6779            if(b instanceof FieldDeclaration) {
6780              FieldDeclaration f = (FieldDeclaration)b;
6781              //System.err.println("  working on field " + f.name() + " which is child " + i);
6782              if(f == v)
6783                return !f.hasInit();
6784              if((v.isClassVariable() && f.isStatic()) || (v.isInstanceVariable() && !f.isStatic()))
6785                return f.isDUafter(v);
6786              //System.err.println("  field " + f.name() + " can not affect " + v.name());
6787            }
6788            else if(b instanceof StaticInitializer && v.isClassVariable()) {
6789              StaticInitializer si = (StaticInitializer)b;
6790              //System.err.println("  working on static initializer which is child " + i);
6791              return si.isDUafter(v);
6792            }
6793            else if(b instanceof InstanceInitializer && v.isInstanceVariable()) {
6794              InstanceInitializer ii = (InstanceInitializer)b;
6795              //System.err.println("  working on instance initializer which is child " + i);
6796              return ii.isDUafter(v);
6797            }
6798          }
6799        }
6800        //System.err.println("Reached TypeDecl when searching for DU for variable");
6801        return isDUbefore(v);
6802      }
6803      }
6804        else {      return getParent().Define_boolean_isDUbefore(this, caller, v);
6805        }
6806      }
6807      /**
6808       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:16
6809       * @apilevel internal
6810       */
6811      public Collection Define_Collection_lookupConstructor(ASTNode caller, ASTNode child) {
6812        if(caller == getBodyDeclListNoTransform())  {
6813        int childIndex = caller.getIndexOfChild(child);
6814        return constructors();
6815      }
6816        else {      return getParent().Define_Collection_lookupConstructor(this, caller);
6817        }
6818      }
6819      /**
6820       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:20
6821       * @apilevel internal
6822       */
6823      public Collection Define_Collection_lookupSuperConstructor(ASTNode caller, ASTNode child) {
6824        if(caller == getBodyDeclListNoTransform())  {
6825        int childIndex = caller.getIndexOfChild(child);
6826        return lookupSuperConstructor();
6827      }
6828        else {      return getParent().Define_Collection_lookupSuperConstructor(this, caller);
6829        }
6830      }
6831      /**
6832       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:34
6833       * @apilevel internal
6834       */
6835      public Collection Define_Collection_lookupMethod(ASTNode caller, ASTNode child, String name) {
6836        if(caller == getBodyDeclListNoTransform())  {
6837        int i = caller.getIndexOfChild(child);
6838        return unqualifiedLookupMethod(name);
6839      }
6840        else {      return getParent().Define_Collection_lookupMethod(this, caller, name);
6841        }
6842      }
6843      /**
6844       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:358
6845       * @apilevel internal
6846       */
6847      public SimpleSet Define_SimpleSet_lookupType(ASTNode caller, ASTNode child, String name) {
6848        if(caller == getBodyDeclListNoTransform())  { 
6849        int childIndex = caller.getIndexOfChild(child);
6850        {
6851        SimpleSet c = memberTypes(name);
6852        if(!c.isEmpty()) 
6853          return c;
6854        if(name().equals(name))
6855          return SimpleSet.emptySet.add(this);
6856    
6857        c = lookupType(name);
6858        // 8.5.2
6859        if(isClassDecl() && isStatic() && !isTopLevelType()) {
6860          SimpleSet newSet = SimpleSet.emptySet;
6861          for(Iterator iter = c.iterator(); iter.hasNext(); ) {
6862            TypeDecl d = (TypeDecl)iter.next();
6863            //if(d.isStatic() || d.isTopLevelType() || this.instanceOf(d.enclosingType())) {
6864              newSet = newSet.add(d);
6865            //}
6866          }
6867          c = newSet;
6868        }
6869        return c;
6870      }
6871      }
6872        else {      return getParent().Define_SimpleSet_lookupType(this, caller, name);
6873        }
6874      }
6875      /**
6876       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:27
6877       * @apilevel internal
6878       */
6879      public SimpleSet Define_SimpleSet_lookupVariable(ASTNode caller, ASTNode child, String name) {
6880        if(caller == getBodyDeclListNoTransform())  { 
6881        int i = caller.getIndexOfChild(child);
6882        {
6883        SimpleSet list = memberFields(name);
6884        if(!list.isEmpty()) return list;
6885        list = lookupVariable(name);
6886        if(inStaticContext() || isStatic())
6887          list = removeInstanceVariables(list);
6888        return list;
6889      }
6890      }
6891        else {      return getParent().Define_SimpleSet_lookupVariable(this, caller, name);
6892        }
6893      }
6894      /**
6895       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:301
6896       * @apilevel internal
6897       */
6898      public boolean Define_boolean_mayBePublic(ASTNode caller, ASTNode child) {
6899        if(caller == getBodyDeclListNoTransform())  {
6900        int childIndex = caller.getIndexOfChild(child);
6901        return false;
6902      }
6903        else if(caller == getModifiersNoTransform()) {
6904          return true;
6905        }
6906        else {      return getParent().Define_boolean_mayBePublic(this, caller);
6907        }
6908      }
6909      /**
6910       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:302
6911       * @apilevel internal
6912       */
6913      public boolean Define_boolean_mayBeProtected(ASTNode caller, ASTNode child) {
6914        if(caller == getBodyDeclListNoTransform())  {
6915        int childIndex = caller.getIndexOfChild(child);
6916        return false;
6917      }
6918        else if(caller == getModifiersNoTransform()) {
6919          return true;
6920        }
6921        else {      return getParent().Define_boolean_mayBeProtected(this, caller);
6922        }
6923      }
6924      /**
6925       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:303
6926       * @apilevel internal
6927       */
6928      public boolean Define_boolean_mayBePrivate(ASTNode caller, ASTNode child) {
6929        if(caller == getBodyDeclListNoTransform())  {
6930        int childIndex = caller.getIndexOfChild(child);
6931        return false;
6932      }
6933        else if(caller == getModifiersNoTransform()) {
6934          return true;
6935        }
6936        else {      return getParent().Define_boolean_mayBePrivate(this, caller);
6937        }
6938      }
6939      /**
6940       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:306
6941       * @apilevel internal
6942       */
6943      public boolean Define_boolean_mayBeAbstract(ASTNode caller, ASTNode child) {
6944        if(caller == getBodyDeclListNoTransform())  {
6945        int childIndex = caller.getIndexOfChild(child);
6946        return false;
6947      }
6948        else if(caller == getModifiersNoTransform()) {
6949          return true;
6950        }
6951        else {      return getParent().Define_boolean_mayBeAbstract(this, caller);
6952        }
6953      }
6954      /**
6955       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:304
6956       * @apilevel internal
6957       */
6958      public boolean Define_boolean_mayBeStatic(ASTNode caller, ASTNode child) {
6959        if(caller == getBodyDeclListNoTransform())  {
6960        int childIndex = caller.getIndexOfChild(child);
6961        return false;
6962      }
6963        else if(caller == getModifiersNoTransform()) {
6964          return true;
6965        }
6966        else {      return getParent().Define_boolean_mayBeStatic(this, caller);
6967        }
6968      }
6969      /**
6970       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:309
6971       * @apilevel internal
6972       */
6973      public boolean Define_boolean_mayBeStrictfp(ASTNode caller, ASTNode child) {
6974        if(caller == getBodyDeclListNoTransform())  {
6975        int childIndex = caller.getIndexOfChild(child);
6976        return false;
6977      }
6978        else if(caller == getModifiersNoTransform()) {
6979          return true;
6980        }
6981        else {      return getParent().Define_boolean_mayBeStrictfp(this, caller);
6982        }
6983      }
6984      /**
6985       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:305
6986       * @apilevel internal
6987       */
6988      public boolean Define_boolean_mayBeFinal(ASTNode caller, ASTNode child) {
6989        if(caller == getBodyDeclListNoTransform())  {
6990        int childIndex = caller.getIndexOfChild(child);
6991        return false;
6992      }
6993        else {      return getParent().Define_boolean_mayBeFinal(this, caller);
6994        }
6995      }
6996      /**
6997       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:307
6998       * @apilevel internal
6999       */
7000      public boolean Define_boolean_mayBeVolatile(ASTNode caller, ASTNode child) {
7001        if(caller == getBodyDeclListNoTransform())  {
7002        int childIndex = caller.getIndexOfChild(child);
7003        return false;
7004      }
7005        else {      return getParent().Define_boolean_mayBeVolatile(this, caller);
7006        }
7007      }
7008      /**
7009       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:308
7010       * @apilevel internal
7011       */
7012      public boolean Define_boolean_mayBeTransient(ASTNode caller, ASTNode child) {
7013        if(caller == getBodyDeclListNoTransform())  {
7014        int childIndex = caller.getIndexOfChild(child);
7015        return false;
7016      }
7017        else {      return getParent().Define_boolean_mayBeTransient(this, caller);
7018        }
7019      }
7020      /**
7021       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:310
7022       * @apilevel internal
7023       */
7024      public boolean Define_boolean_mayBeSynchronized(ASTNode caller, ASTNode child) {
7025        if(caller == getBodyDeclListNoTransform())  {
7026        int childIndex = caller.getIndexOfChild(child);
7027        return false;
7028      }
7029        else {      return getParent().Define_boolean_mayBeSynchronized(this, caller);
7030        }
7031      }
7032      /**
7033       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:311
7034       * @apilevel internal
7035       */
7036      public boolean Define_boolean_mayBeNative(ASTNode caller, ASTNode child) {
7037        if(caller == getBodyDeclListNoTransform())  {
7038        int childIndex = caller.getIndexOfChild(child);
7039        return false;
7040      }
7041        else {      return getParent().Define_boolean_mayBeNative(this, caller);
7042        }
7043      }
7044      /**
7045       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:297
7046       * @apilevel internal
7047       */
7048      public VariableScope Define_VariableScope_outerScope(ASTNode caller, ASTNode child) {
7049        if(caller == getBodyDeclListNoTransform())  {
7050        int childIndex = caller.getIndexOfChild(child);
7051        return this;
7052      }
7053        else {      return getParent().Define_VariableScope_outerScope(this, caller);
7054        }
7055      }
7056      /**
7057       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:369
7058       * @apilevel internal
7059       */
7060      public boolean Define_boolean_insideLoop(ASTNode caller, ASTNode child) {
7061        if(caller == getBodyDeclListNoTransform())  {
7062        int i = caller.getIndexOfChild(child);
7063        return false;
7064      }
7065        else {      return getParent().Define_boolean_insideLoop(this, caller);
7066        }
7067      }
7068      /**
7069       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:376
7070       * @apilevel internal
7071       */
7072      public boolean Define_boolean_insideSwitch(ASTNode caller, ASTNode child) {
7073        if(caller == getBodyDeclListNoTransform())  {
7074        int i = caller.getIndexOfChild(child);
7075        return false;
7076      }
7077        else {      return getParent().Define_boolean_insideSwitch(this, caller);
7078        }
7079      }
7080      /**
7081       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:118
7082       * @apilevel internal
7083       */
7084      public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) {
7085        if(caller == getBodyDeclListNoTransform())  {
7086        int childIndex = caller.getIndexOfChild(child);
7087        return NameType.EXPRESSION_NAME;
7088      }
7089        else {      return getParent().Define_NameType_nameType(this, caller);
7090        }
7091      }
7092      /**
7093       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:218
7094       * @apilevel internal
7095       */
7096      public boolean Define_boolean_isAnonymous(ASTNode caller, ASTNode child) {
7097        if(caller == getBodyDeclListNoTransform())  {
7098        int childIndex = caller.getIndexOfChild(child);
7099        return false;
7100      }
7101        else {      return getParent().Define_boolean_isAnonymous(this, caller);
7102        }
7103      }
7104      /**
7105       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:494
7106       * @apilevel internal
7107       */
7108      public TypeDecl Define_TypeDecl_enclosingType(ASTNode caller, ASTNode child) {
7109        if(caller == getBodyDeclListNoTransform())  {
7110        int childIndex = caller.getIndexOfChild(child);
7111        return this;
7112      }
7113        else {      return getParent().Define_TypeDecl_enclosingType(this, caller);
7114        }
7115      }
7116      /**
7117       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:520
7118       * @apilevel internal
7119       */
7120      public boolean Define_boolean_isNestedType(ASTNode caller, ASTNode child) {
7121        if(caller == getBodyDeclListNoTransform())  {
7122        int childIndex = caller.getIndexOfChild(child);
7123        return true;
7124      }
7125        else {      return getParent().Define_boolean_isNestedType(this, caller);
7126        }
7127      }
7128      /**
7129       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:542
7130       * @apilevel internal
7131       */
7132      public boolean Define_boolean_isLocalClass(ASTNode caller, ASTNode child) {
7133        if(caller == getBodyDeclListNoTransform())  {
7134        int childIndex = caller.getIndexOfChild(child);
7135        return false;
7136      }
7137        else {      return getParent().Define_boolean_isLocalClass(this, caller);
7138        }
7139      }
7140      /**
7141       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:575
7142       * @apilevel internal
7143       */
7144      public TypeDecl Define_TypeDecl_hostType(ASTNode caller, ASTNode child) {
7145        if(caller == getModifiersNoTransform()) {
7146          return hostType();
7147        }
7148        else if(caller == getBodyDeclListNoTransform())  {
7149        int childIndex = caller.getIndexOfChild(child);
7150        return hostType();
7151      }
7152        else  {
7153          int childIndex = this.getIndexOfChild(caller);
7154          return hostType();
7155        }
7156      }
7157      /**
7158       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:404
7159       * @apilevel internal
7160       */
7161      public TypeDecl Define_TypeDecl_returnType(ASTNode caller, ASTNode child) {
7162        if(caller == getBodyDeclListNoTransform())  {
7163        int childIndex = caller.getIndexOfChild(child);
7164        return typeVoid();
7165      }
7166        else {      return getParent().Define_TypeDecl_returnType(this, caller);
7167        }
7168      }
7169      /**
7170       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:509
7171       * @apilevel internal
7172       */
7173      public TypeDecl Define_TypeDecl_enclosingInstance(ASTNode caller, ASTNode child) {
7174        if(caller == getBodyDeclListNoTransform())  { 
7175        int childIndex = caller.getIndexOfChild(child);
7176        {
7177        if(getBodyDecl(childIndex) instanceof MemberTypeDecl && !((MemberTypeDecl)getBodyDecl(childIndex)).typeDecl().isInnerType())
7178          return null;
7179        if(getBodyDecl(childIndex) instanceof ConstructorDecl)
7180          return enclosingInstance();
7181        return this;
7182      }
7183      }
7184        else {      return getParent().Define_TypeDecl_enclosingInstance(this, caller);
7185        }
7186      }
7187      /**
7188       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:12
7189       * @apilevel internal
7190       */
7191      public String Define_String_methodHost(ASTNode caller, ASTNode child) {
7192        if(caller == getBodyDeclListNoTransform())  {
7193        int childIndex = caller.getIndexOfChild(child);
7194        return typeName();
7195      }
7196        else {      return getParent().Define_String_methodHost(this, caller);
7197        }
7198      }
7199      /**
7200       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:138
7201       * @apilevel internal
7202       */
7203      public boolean Define_boolean_inStaticContext(ASTNode caller, ASTNode child) {
7204        if(caller == getBodyDeclListNoTransform())  {
7205        int childIndex = caller.getIndexOfChild(child);
7206        return isStatic() || inStaticContext();
7207      }
7208        else {      return getParent().Define_boolean_inStaticContext(this, caller);
7209        }
7210      }
7211      /**
7212       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/UnreachableStatements.jrag:159
7213       * @apilevel internal
7214       */
7215      public boolean Define_boolean_reportUnreachable(ASTNode caller, ASTNode child) {
7216         {
7217          int childIndex = this.getIndexOfChild(caller);
7218          return true;
7219        }
7220      }
7221      /**
7222       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:74
7223       * @apilevel internal
7224       */
7225      public boolean Define_boolean_mayUseAnnotationTarget(ASTNode caller, ASTNode child, String name) {
7226        if(caller == getModifiersNoTransform()) {
7227          return name.equals("TYPE");
7228        }
7229        else {      return getParent().Define_boolean_mayUseAnnotationTarget(this, caller, name);
7230        }
7231      }
7232      /**
7233       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:271
7234       * @apilevel internal
7235       */
7236      public boolean Define_boolean_withinSuppressWarnings(ASTNode caller, ASTNode child, String s) {
7237        if(caller == getBodyDeclListNoTransform())  {
7238        int i = caller.getIndexOfChild(child);
7239        return getBodyDecl(i).hasAnnotationSuppressWarnings(s) || hasAnnotationSuppressWarnings(s) ||
7240        withinSuppressWarnings(s);
7241      }
7242        else {      return getParent().Define_boolean_withinSuppressWarnings(this, caller, s);
7243        }
7244      }
7245      /**
7246       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:374
7247       * @apilevel internal
7248       */
7249      public boolean Define_boolean_withinDeprecatedAnnotation(ASTNode caller, ASTNode child) {
7250        if(caller == getBodyDeclListNoTransform())  {
7251        int i = caller.getIndexOfChild(child);
7252        return getBodyDecl(i).isDeprecated() || isDeprecated() || withinDeprecatedAnnotation();
7253      }
7254        else {      return getParent().Define_boolean_withinDeprecatedAnnotation(this, caller);
7255        }
7256      }
7257      /**
7258       * @apilevel internal
7259       */
7260      public ASTNode rewriteTo() {
7261        return super.rewriteTo();
7262      }
7263    }