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 FieldDeclaration : {@link MemberDecl} ::= <span class="component">{@link Modifiers}</span> <span class="component">TypeAccess:{@link Access}</span> <span class="component">&lt;ID:String&gt;</span> <span class="component">[Init:{@link Expr}]</span>;
015     * @ast node
016     * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:80
017     */
018    public class FieldDeclaration extends MemberDecl implements Cloneable, SimpleSet, Iterator, Variable {
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 FieldDeclaration clone() throws CloneNotSupportedException {
034        FieldDeclaration node = (FieldDeclaration)super.clone();
035        node.accessibleFrom_TypeDecl_values = null;
036        node.exceptions_computed = false;
037        node.exceptions_value = null;
038        node.isDAafter_Variable_values = null;
039        node.isDUafter_Variable_values = null;
040        node.constant_computed = false;
041        node.constant_value = null;
042        node.attributes_computed = false;
043        node.attributes_value = null;
044        node.flags_computed = false;
045        node.usesTypeVariable_computed = false;
046        node.sourceVariableDecl_computed = false;
047        node.sourceVariableDecl_value = null;
048        node.throwTypes_computed = false;
049        node.throwTypes_value = null;
050        node.in$Circle(false);
051        node.is$Final(false);
052        return node;
053      }
054    /**
055     * @apilevel internal
056     */
057      @SuppressWarnings({"unchecked", "cast"})
058    public FieldDeclaration copy() {
059      
060      try {
061        FieldDeclaration node = (FieldDeclaration) clone();
062        node.parent = null;
063        if(children != null)
064          node.children = (ASTNode[]) children.clone();
065        
066        return node;
067      } catch (CloneNotSupportedException e) {
068        throw new Error("Error: clone not supported for " + getClass().getName());
069      }
070      
071    }/**
072     * Create a deep copy of the AST subtree at this node.
073     * The copy is dangling, i.e. has no parent.
074     * @return dangling copy of the subtree at this node
075     * @apilevel low-level
076     */
077      @SuppressWarnings({"unchecked", "cast"})
078    public FieldDeclaration fullCopy() {
079      
080      FieldDeclaration tree = (FieldDeclaration) copy();
081      if (children != null) {
082        for (int i = 0; i < children.length; ++i) {
083          
084          ASTNode child = (ASTNode) children[i];
085          if(child != null) {
086            child = child.fullCopy();
087            tree.setChild(child, i);
088          }
089        }
090      }
091      return tree;
092      
093    }  /**
094       * @ast method 
095       * @aspect BoundNames
096       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:11
097       */
098      public Access createQualifiedBoundAccess() {
099        if(isStatic())
100          return hostType().createQualifiedAccess().qualifiesAccess(new BoundFieldAccess(this));
101        else
102          return new ThisAccess("this").qualifiesAccess(
103            new BoundFieldAccess(this));
104      }
105      /**
106       * @ast method 
107       * @aspect BoundNames
108       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:86
109       */
110      public Access createBoundFieldAccess() {
111        return createQualifiedBoundAccess();
112      }
113      /**
114       * @ast method 
115       * @aspect DataStructures
116       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:81
117       */
118      public SimpleSet add(Object o) {
119        return new SimpleSetImpl().add(this).add(o);
120      }
121      /**
122       * @ast method 
123       * @aspect DataStructures
124       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:85
125       */
126      public boolean isSingleton() { return true; }
127      /**
128       * @ast method 
129       * @aspect DataStructures
130       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:86
131       */
132      public boolean isSingleton(Object o) { return contains(o); }
133      /**
134       * @ast method 
135       * @aspect DataStructures
136       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:89
137       */
138      
139      private FieldDeclaration iterElem;
140      /**
141       * @ast method 
142       * @aspect DataStructures
143       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:90
144       */
145      public Iterator iterator() { iterElem = this; return this; }
146      /**
147       * @ast method 
148       * @aspect DataStructures
149       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:91
150       */
151      public boolean hasNext() { return iterElem != null; }
152      /**
153       * @ast method 
154       * @aspect DataStructures
155       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:92
156       */
157      public Object next() { Object o = iterElem; iterElem = null; return o; }
158      /**
159       * @ast method 
160       * @aspect DataStructures
161       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:93
162       */
163      public void remove() { throw new UnsupportedOperationException(); }
164      /**
165       * @ast method 
166       * @aspect DefiniteAssignment
167       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:177
168       */
169      public void definiteAssignment() {
170        super.definiteAssignment();
171        if(isBlank() && isFinal() && isClassVariable()) {
172          boolean found = false;
173          TypeDecl typeDecl = hostType();
174          for(int i = 0; i < typeDecl.getNumBodyDecl(); i++) {
175            if(typeDecl.getBodyDecl(i) instanceof StaticInitializer) {
176              StaticInitializer s = (StaticInitializer)typeDecl.getBodyDecl(i);
177              if(s.isDAafter(this))
178                found = true;
179            }
180            
181            else if(typeDecl.getBodyDecl(i) instanceof FieldDeclaration) {
182              FieldDeclaration f = (FieldDeclaration)typeDecl.getBodyDecl(i);
183              if(f.isStatic() && f.isDAafter(this))
184                found = true;
185            }
186            
187          }
188          if(!found)
189            error("blank final class variable " + name() + " in " + hostType().typeName() + " is not definitely assigned in static initializer");
190    
191        }
192        if(isBlank() && isFinal() && isInstanceVariable()) {
193          TypeDecl typeDecl = hostType();
194          boolean found = false;
195          for(int i = 0; !found && i < typeDecl.getNumBodyDecl(); i++) {
196            if(typeDecl.getBodyDecl(i) instanceof FieldDeclaration) {
197              FieldDeclaration f = (FieldDeclaration)typeDecl.getBodyDecl(i);
198              if(!f.isStatic() && f.isDAafter(this))
199                found = true;
200            }
201            else if(typeDecl.getBodyDecl(i) instanceof InstanceInitializer) {
202              InstanceInitializer ii = (InstanceInitializer)typeDecl.getBodyDecl(i);
203              if(ii.getBlock().isDAafter(this))
204                found = true;
205            }
206          }
207          for(Iterator iter = typeDecl.constructors().iterator(); !found && iter.hasNext(); ) {
208            ConstructorDecl c = (ConstructorDecl)iter.next();
209            if(!c.isDAafter(this)) {
210              error("blank final instance variable " + name() + " in " + hostType().typeName() + " is not definitely assigned after " + c.signature());
211              }
212          }
213        }
214        if(isBlank() && hostType().isInterfaceDecl()) {
215                error("variable  " + name() + " in " + hostType().typeName() + " which is an interface must have an initializer");
216        }
217    
218      }
219      /**
220       * @ast method 
221       * @aspect Modifiers
222       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:114
223       */
224      public void checkModifiers() {
225        super.checkModifiers();
226        if(hostType().isInterfaceDecl()) {
227          if(isProtected())
228            error("an interface field may not be protected");
229          if(isPrivate())
230            error("an interface field may not be private");
231          if(isTransient())
232            error("an interface field may not be transient");
233          if(isVolatile())
234            error("an interface field may not be volatile");
235        }
236      }
237      /**
238       * @ast method 
239       * @aspect NameCheck
240       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:282
241       */
242      public void nameCheck() {
243        super.nameCheck();
244        // 8.3
245        for(Iterator iter = hostType().memberFields(name()).iterator(); iter.hasNext(); ) {
246          Variable v = (Variable)iter.next();
247          if(v != this && v.hostType() == hostType())
248            error("field named " + name() + " is multiply declared in type " + hostType().typeName());
249        }
250    
251      }
252      /**
253       * @ast method 
254       * @aspect NodeConstructors
255       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NodeConstructors.jrag:86
256       */
257      public FieldDeclaration(Modifiers m, Access type, String name) {
258        this(m, type, name, new Opt());
259      }
260      /**
261       * @ast method 
262       * @aspect NodeConstructors
263       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NodeConstructors.jrag:90
264       */
265      public FieldDeclaration(Modifiers m, Access type, String name, Expr init) {
266        this(m, type, name, new Opt(init));
267      }
268      /**
269       * @ast method 
270       * @aspect PrettyPrint
271       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:152
272       */
273      public void toString(StringBuffer s) {
274        s.append(indent());
275        getModifiers().toString(s);
276        getTypeAccess().toString(s);
277        s.append(" " + name());
278        if(hasInit()) {
279          s.append(" = ");
280          getInit().toString(s);
281        }
282        s.append(";");
283      }
284      /**
285       * @ast method 
286       * @aspect TypeCheck
287       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:33
288       */
289      public void typeCheck() {
290        if(hasInit()) {
291          TypeDecl source = getInit().type();
292          TypeDecl dest = type();
293          if(!source.assignConversionTo(dest, getInit()))
294            error("can not assign field " + name() + " of type " + dest.typeName() +
295                  " a value of type " + source.typeName());
296        }
297      }
298      /**
299       * @ast method 
300       * @aspect VariableDeclarationTransformation
301       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:91
302       */
303      
304      // when splitting a FieldDecl into multiple FieldDeclarations, provide every FieldDeclaration with a reference
305      // to the original FieldDecl; if only a single FieldDeclaration results, no reference is stored
306      private FieldDecl fieldDecl = null;
307      /**
308       * @ast method 
309       * @aspect VariableDeclarationTransformation
310       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:92
311       */
312      public FieldDecl getFieldDecl() {
313         return fieldDecl;
314      }
315      /**
316       * @ast method 
317       * @aspect VariableDeclarationTransformation
318       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:95
319       */
320      public void setFieldDecl(FieldDecl fieldDecl) {
321         this.fieldDecl = fieldDecl;
322      }
323      /**
324       * @ast method 
325       * @aspect CodeGeneration
326       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:678
327       */
328      public void emitLoadField(CodeGeneration gen, TypeDecl typeDecl) {
329        if(hostType().isArrayDecl() && name().equals("length")) {
330          gen.emit(Bytecode.ARRAYLENGTH);
331          return;
332        }
333        String classname = typeDecl.constantPoolName();
334        String      desc = type().typeDescriptor();
335        String      name = name();
336        int index = gen.constantPool().addFieldref(classname, name, desc);
337        if(isStatic())
338          gen.emit(Bytecode.GETSTATIC, type().variableSize()).add2(index);
339        else
340          gen.emit(Bytecode.GETFIELD, type().variableSize() - 1).add2(index);
341      }
342      /**
343       * @ast method 
344       * @aspect CodeGeneration
345       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:736
346       */
347      public void emitStoreField(CodeGeneration gen, TypeDecl typeDecl) {
348        String classname = typeDecl.constantPoolName();
349        String      desc = type().typeDescriptor();
350        String      name = name();
351        int index = gen.constantPool().addFieldref(classname, name, desc);
352        if(isStatic())
353          gen.emit(Bytecode.PUTSTATIC, -type().variableSize()).add2(index);
354        else
355          gen.emit(Bytecode.PUTFIELD, -type().variableSize() - 1).add2(index);
356      }
357      /**
358       * @ast method 
359       * @aspect GenerateClassfile
360       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:372
361       */
362      public boolean clear() {
363        return false;
364      }
365      /**
366       * @ast method 
367       * @aspect InnerClasses
368       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:290
369       */
370      public MethodDecl createAccessor(TypeDecl fieldQualifier) {
371        MethodDecl m = (MethodDecl)fieldQualifier.getAccessor(this, "field_read");
372        if(m != null) return m;
373        
374        int accessorIndex = fieldQualifier.accessorCounter++;
375        Modifiers modifiers = new Modifiers(new List());
376        modifiers.addModifier(new Modifier("static"));
377        modifiers.addModifier(new Modifier("synthetic"));
378        modifiers.addModifier(new Modifier("public"));
379    
380        List parameters = new List();
381        if(!isStatic())
382          parameters.add(new ParameterDeclaration(fieldQualifier.createQualifiedAccess(), "that"));
383    
384        m = new MethodDecl(
385          modifiers,
386          type().createQualifiedAccess(),
387          "get$" + name() + "$access$" + accessorIndex,
388          parameters,
389          new List(),
390          new Opt(
391            new Block(
392              new List().add(
393                new ReturnStmt(createAccess())
394              )
395            )
396          )
397        );
398        m = fieldQualifier.addMemberMethod(m);
399        fieldQualifier.addAccessor(this, "field_read", m);
400        return m;
401      }
402      /**
403       * @ast method 
404       * @aspect InnerClasses
405       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:323
406       */
407      public MethodDecl createAccessorWrite(TypeDecl fieldQualifier) {
408        MethodDecl m = (MethodDecl)fieldQualifier.getAccessor(this, "field_write");
409        if(m != null) return m;
410    
411        int accessorIndex = fieldQualifier.accessorCounter++;
412        Modifiers modifiers = new Modifiers(new List());
413        modifiers.addModifier(new Modifier("static"));
414        modifiers.addModifier(new Modifier("synthetic"));
415        modifiers.addModifier(new Modifier("public"));
416    
417        List parameters = new List();
418        if(!isStatic())
419          parameters.add(new ParameterDeclaration(fieldQualifier.createQualifiedAccess(), "that"));
420        parameters.add(new ParameterDeclaration(type().createQualifiedAccess(), "value"));
421    
422        m = new MethodDecl(
423          modifiers,
424          type().createQualifiedAccess(),
425          "set$" + name() + "$access$" + accessorIndex,
426          parameters,
427          new List(),
428          new Opt(
429            new Block(
430              new List().add(
431                new ExprStmt(
432                  new AssignSimpleExpr(
433                    createAccess(),
434                    new VarAccess("value")
435                  )
436                )
437              ).add(
438                new ReturnStmt(
439                  new Opt(
440                    new VarAccess("value")
441                  )
442                )
443              )
444            )
445          )
446        );
447        m = fieldQualifier.addMemberMethod(m);
448        fieldQualifier.addAccessor(this, "field_write", m);
449        return m;
450      }
451      /**
452       * @ast method 
453       * @aspect InnerClasses
454       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:368
455       */
456      private Access createAccess() {
457        Access fieldAccess = new BoundFieldAccess(this);
458        return isStatic() ? fieldAccess : new VarAccess("that").qualifiesAccess(fieldAccess);
459      }
460      /**
461       * @ast method 
462       * @aspect LookupParTypeDecl
463       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1295
464       */
465      public BodyDecl substitutedBodyDecl(Parameterization parTypeDecl) {
466        FieldDeclaration f = new FieldDeclarationSubstituted(
467          (Modifiers)getModifiers().fullCopy(),
468          getTypeAccess().type().substituteReturnType(parTypeDecl),
469          getID(),
470          new Opt(),
471          this
472        );
473        return f;
474      }
475      /**
476       * @ast method 
477       * @aspect UncheckedConversion
478       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/UncheckedConversion.jrag:25
479       */
480      public void checkWarnings() {
481        if (hasInit() && !suppressWarnings("unchecked"))
482          checkUncheckedConversion(getInit().type(), type());
483      }
484      /**
485       * @ast method 
486       * 
487       */
488      public FieldDeclaration() {
489        super();
490    
491    
492      }
493      /**
494       * Initializes the child array to the correct size.
495       * Initializes List and Opt nta children.
496       * @apilevel internal
497       * @ast method
498       * @ast method 
499       * 
500       */
501      public void init$Children() {
502        children = new ASTNode[3];
503        setChild(new Opt(), 2);
504      }
505      /**
506       * @ast method 
507       * 
508       */
509      public FieldDeclaration(Modifiers p0, Access p1, String p2, Opt<Expr> p3) {
510        setChild(p0, 0);
511        setChild(p1, 1);
512        setID(p2);
513        setChild(p3, 2);
514      }
515      /**
516       * @ast method 
517       * 
518       */
519      public FieldDeclaration(Modifiers p0, Access p1, beaver.Symbol p2, Opt<Expr> p3) {
520        setChild(p0, 0);
521        setChild(p1, 1);
522        setID(p2);
523        setChild(p3, 2);
524      }
525      /**
526       * @apilevel low-level
527       * @ast method 
528       * 
529       */
530      protected int numChildren() {
531        return 3;
532      }
533      /**
534       * @apilevel internal
535       * @ast method 
536       * 
537       */
538      public boolean mayHaveRewrite() {
539        return false;
540      }
541      /**
542       * Replaces the Modifiers child.
543       * @param node The new node to replace the Modifiers child.
544       * @apilevel high-level
545       * @ast method 
546       * 
547       */
548      public void setModifiers(Modifiers node) {
549        setChild(node, 0);
550      }
551      /**
552       * Retrieves the Modifiers child.
553       * @return The current node used as the Modifiers child.
554       * @apilevel high-level
555       * @ast method 
556       * 
557       */
558      public Modifiers getModifiers() {
559        return (Modifiers)getChild(0);
560      }
561      /**
562       * Retrieves the Modifiers child.
563       * <p><em>This method does not invoke AST transformations.</em></p>
564       * @return The current node used as the Modifiers child.
565       * @apilevel low-level
566       * @ast method 
567       * 
568       */
569      public Modifiers getModifiersNoTransform() {
570        return (Modifiers)getChildNoTransform(0);
571      }
572      /**
573       * Replaces the TypeAccess child.
574       * @param node The new node to replace the TypeAccess child.
575       * @apilevel high-level
576       * @ast method 
577       * 
578       */
579      public void setTypeAccess(Access node) {
580        setChild(node, 1);
581      }
582      /**
583       * Retrieves the TypeAccess child.
584       * @return The current node used as the TypeAccess child.
585       * @apilevel high-level
586       * @ast method 
587       * 
588       */
589      public Access getTypeAccess() {
590        return (Access)getChild(1);
591      }
592      /**
593       * Retrieves the TypeAccess child.
594       * <p><em>This method does not invoke AST transformations.</em></p>
595       * @return The current node used as the TypeAccess child.
596       * @apilevel low-level
597       * @ast method 
598       * 
599       */
600      public Access getTypeAccessNoTransform() {
601        return (Access)getChildNoTransform(1);
602      }
603      /**
604       * Replaces the lexeme ID.
605       * @param value The new value for the lexeme ID.
606       * @apilevel high-level
607       * @ast method 
608       * 
609       */
610      public void setID(String value) {
611        tokenString_ID = value;
612      }
613      /**
614       * @apilevel internal
615       * @ast method 
616       * 
617       */
618      
619      /**
620       * @apilevel internal
621       */
622      protected String tokenString_ID;
623      /**
624       * @ast method 
625       * 
626       */
627      
628      public int IDstart;
629      /**
630       * @ast method 
631       * 
632       */
633      
634      public int IDend;
635      /**
636       * JastAdd-internal setter for lexeme ID using the Beaver parser.
637       * @apilevel internal
638       * @ast method 
639       * 
640       */
641      public void setID(beaver.Symbol symbol) {
642        if(symbol.value != null && !(symbol.value instanceof String))
643          throw new UnsupportedOperationException("setID is only valid for String lexemes");
644        tokenString_ID = (String)symbol.value;
645        IDstart = symbol.getStart();
646        IDend = symbol.getEnd();
647      }
648      /**
649       * Retrieves the value for the lexeme ID.
650       * @return The value for the lexeme ID.
651       * @apilevel high-level
652       * @ast method 
653       * 
654       */
655      public String getID() {
656        return tokenString_ID != null ? tokenString_ID : "";
657      }
658      /**
659       * Replaces the optional node for the Init child. This is the {@code Opt} node containing the child Init, not the actual child!
660       * @param opt The new node to be used as the optional node for the Init child.
661       * @apilevel low-level
662       * @ast method 
663       * 
664       */
665      public void setInitOpt(Opt<Expr> opt) {
666        setChild(opt, 2);
667      }
668      /**
669       * Check whether the optional Init child exists.
670       * @return {@code true} if the optional Init child exists, {@code false} if it does not.
671       * @apilevel high-level
672       * @ast method 
673       * 
674       */
675      public boolean hasInit() {
676        return getInitOpt().getNumChild() != 0;
677      }
678      /**
679       * Retrieves the (optional) Init child.
680       * @return The Init child, if it exists. Returns {@code null} otherwise.
681       * @apilevel low-level
682       * @ast method 
683       * 
684       */
685      @SuppressWarnings({"unchecked", "cast"})
686      public Expr getInit() {
687        return (Expr)getInitOpt().getChild(0);
688      }
689      /**
690       * Replaces the (optional) Init child.
691       * @param node The new node to be used as the Init child.
692       * @apilevel high-level
693       * @ast method 
694       * 
695       */
696      public void setInit(Expr node) {
697        getInitOpt().setChild(node, 0);
698      }
699      /**
700       * @apilevel low-level
701       * @ast method 
702       * 
703       */
704      @SuppressWarnings({"unchecked", "cast"})
705      public Opt<Expr> getInitOpt() {
706        return (Opt<Expr>)getChild(2);
707      }
708      /**
709       * Retrieves the optional node for child Init. This is the {@code Opt} node containing the child Init, not the actual child!
710       * <p><em>This method does not invoke AST transformations.</em></p>
711       * @return The optional node for child Init.
712       * @apilevel low-level
713       * @ast method 
714       * 
715       */
716      @SuppressWarnings({"unchecked", "cast"})
717      public Opt<Expr> getInitOptNoTransform() {
718        return (Opt<Expr>)getChildNoTransform(2);
719      }
720      /**
721       * @ast method 
722       * @aspect Attributes
723       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Attributes.jrag:183
724       */
725      private Collection refined_Attributes_FieldDeclaration_attributes()
726    {
727        ArrayList l = new ArrayList();
728        if(isFinal() && isConstant() && (type().isPrimitive() || type().isString()))
729          l.add(new ConstantValueAttribute(hostType().constantPool(), this));
730        return l;
731      }
732      /**
733       * @ast method 
734       * @aspect AnnotationsCodegen
735       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AnnotationsCodegen.jrag:17
736       */
737      private Collection refined_AnnotationsCodegen_FieldDeclaration_attributes()
738    {
739        Collection c = refined_Attributes_FieldDeclaration_attributes();
740        getModifiers().addRuntimeVisibleAnnotationsAttribute(c);
741        getModifiers().addRuntimeInvisibleAnnotationsAttribute(c);
742        return c;
743      }
744      /**
745       * @attribute syn
746       * @aspect ConstantExpression
747       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:332
748       */
749      public boolean isConstant() {
750        ASTNode$State state = state();
751        try {  return isFinal() && hasInit() && getInit().isConstant() && (type() instanceof PrimitiveType || type().isString());  }
752        finally {
753        }
754      }
755      protected java.util.Map accessibleFrom_TypeDecl_values;
756      /**
757       * @attribute syn
758       * @aspect AccessControl
759       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AccessControl.jrag:109
760       */
761      @SuppressWarnings({"unchecked", "cast"})
762      public boolean accessibleFrom(TypeDecl type) {
763        Object _parameters = type;
764        if(accessibleFrom_TypeDecl_values == null) accessibleFrom_TypeDecl_values = new java.util.HashMap(4);
765        if(accessibleFrom_TypeDecl_values.containsKey(_parameters)) {
766          return ((Boolean)accessibleFrom_TypeDecl_values.get(_parameters)).booleanValue();
767        }
768          ASTNode$State state = state();
769      int num = state.boundariesCrossed;
770      boolean isFinal = this.is$Final();
771        boolean accessibleFrom_TypeDecl_value = accessibleFrom_compute(type);
772      if(isFinal && num == state().boundariesCrossed){ accessibleFrom_TypeDecl_values.put(_parameters, Boolean.valueOf(accessibleFrom_TypeDecl_value)); }
773            return accessibleFrom_TypeDecl_value;
774      }
775      /**
776       * @apilevel internal
777       */
778      private boolean accessibleFrom_compute(TypeDecl type) {
779        if(isPublic())
780          return true;
781        else if(isProtected()) {
782          if(hostPackage().equals(type.hostPackage()))
783            return true;
784          if(type.withinBodyThatSubclasses(hostType()) != null)
785            return true;
786          return false;
787        }
788        else if(isPrivate())
789          return hostType().topLevelType() == type.topLevelType();
790        else
791          return hostPackage().equals(type.hostPackage());
792      }
793      /**
794       * @apilevel internal
795       */
796      protected boolean exceptions_computed = false;
797      /**
798       * @apilevel internal
799       */
800      protected Collection exceptions_value;
801      /**
802       * @attribute syn
803       * @aspect AnonymousClasses
804       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AnonymousClasses.jrag:178
805       */
806      @SuppressWarnings({"unchecked", "cast"})
807      public Collection exceptions() {
808        if(exceptions_computed) {
809          return exceptions_value;
810        }
811          ASTNode$State state = state();
812      int num = state.boundariesCrossed;
813      boolean isFinal = this.is$Final();
814        exceptions_value = exceptions_compute();
815      if(isFinal && num == state().boundariesCrossed){ exceptions_computed = true; }
816            return exceptions_value;
817      }
818      /**
819       * @apilevel internal
820       */
821      private Collection exceptions_compute() {
822        HashSet set = new HashSet();
823        if(isInstanceVariable() && hasInit()) {
824          collectExceptions(set, this);
825          for(Iterator iter = set.iterator(); iter.hasNext(); ) {
826            TypeDecl typeDecl = (TypeDecl)iter.next();
827            if(!getInit().reachedException(typeDecl))
828              iter.remove();
829          }
830        }
831        return set;
832      }
833      /**
834       * @attribute syn
835       * @aspect DataStructures
836       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:79
837       */
838      public int size() {
839        ASTNode$State state = state();
840        try {  return 1;  }
841        finally {
842        }
843      }
844      /**
845       * @attribute syn
846       * @aspect DataStructures
847       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:80
848       */
849      public boolean isEmpty() {
850        ASTNode$State state = state();
851        try {  return false;  }
852        finally {
853        }
854      }
855      /**
856       * @attribute syn
857       * @aspect DataStructures
858       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:84
859       */
860      public boolean contains(Object o) {
861        ASTNode$State state = state();
862        try {  return this == o;  }
863        finally {
864        }
865      }
866      protected java.util.Map isDAafter_Variable_values;
867      /**
868       * @attribute syn
869       * @aspect DA
870       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:314
871       */
872      @SuppressWarnings({"unchecked", "cast"})
873      public boolean isDAafter(Variable v) {
874        Object _parameters = v;
875        if(isDAafter_Variable_values == null) isDAafter_Variable_values = new java.util.HashMap(4);
876        if(isDAafter_Variable_values.containsKey(_parameters)) {
877          return ((Boolean)isDAafter_Variable_values.get(_parameters)).booleanValue();
878        }
879          ASTNode$State state = state();
880      int num = state.boundariesCrossed;
881      boolean isFinal = this.is$Final();
882        boolean isDAafter_Variable_value = isDAafter_compute(v);
883      if(isFinal && num == state().boundariesCrossed){ isDAafter_Variable_values.put(_parameters, Boolean.valueOf(isDAafter_Variable_value)); }
884            return isDAafter_Variable_value;
885      }
886      /**
887       * @apilevel internal
888       */
889      private boolean isDAafter_compute(Variable v) {
890        if(v == this)
891          return hasInit();
892        return hasInit() ? getInit().isDAafter(v) : isDAbefore(v);
893      }
894      protected java.util.Map isDUafter_Variable_values;
895      /**
896       * @attribute syn
897       * @aspect DU
898       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:771
899       */
900      @SuppressWarnings({"unchecked", "cast"})
901      public boolean isDUafter(Variable v) {
902        Object _parameters = v;
903        if(isDUafter_Variable_values == null) isDUafter_Variable_values = new java.util.HashMap(4);
904        if(isDUafter_Variable_values.containsKey(_parameters)) {
905          return ((Boolean)isDUafter_Variable_values.get(_parameters)).booleanValue();
906        }
907          ASTNode$State state = state();
908      int num = state.boundariesCrossed;
909      boolean isFinal = this.is$Final();
910        boolean isDUafter_Variable_value = isDUafter_compute(v);
911      if(isFinal && num == state().boundariesCrossed){ isDUafter_Variable_values.put(_parameters, Boolean.valueOf(isDUafter_Variable_value)); }
912            return isDUafter_Variable_value;
913      }
914      /**
915       * @apilevel internal
916       */
917      private boolean isDUafter_compute(Variable v) {
918        if(v == this)
919          return !hasInit();
920        return hasInit() ? getInit().isDUafter(v) : isDUbefore(v);
921      }
922      /**
923       * @attribute syn
924       * @aspect Modifiers
925       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:214
926       */
927      public boolean isSynthetic() {
928        ASTNode$State state = state();
929        try {  return getModifiers().isSynthetic();  }
930        finally {
931        }
932      }
933      /**
934       * @attribute syn
935       * @aspect Modifiers
936       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:239
937       */
938      public boolean isPublic() {
939        ASTNode$State state = state();
940        try {  return getModifiers().isPublic() || hostType().isInterfaceDecl();  }
941        finally {
942        }
943      }
944      /**
945       * @attribute syn
946       * @aspect Modifiers
947       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:240
948       */
949      public boolean isPrivate() {
950        ASTNode$State state = state();
951        try {  return getModifiers().isPrivate();  }
952        finally {
953        }
954      }
955      /**
956       * @attribute syn
957       * @aspect Modifiers
958       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:241
959       */
960      public boolean isProtected() {
961        ASTNode$State state = state();
962        try {  return getModifiers().isProtected();  }
963        finally {
964        }
965      }
966      /**
967       * @attribute syn
968       * @aspect Modifiers
969       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:242
970       */
971      public boolean isStatic() {
972        ASTNode$State state = state();
973        try {  return getModifiers().isStatic() || hostType().isInterfaceDecl();  }
974        finally {
975        }
976      }
977      /**
978       * @attribute syn
979       * @aspect Modifiers
980       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:244
981       */
982      public boolean isFinal() {
983        ASTNode$State state = state();
984        try {  return getModifiers().isFinal() || hostType().isInterfaceDecl();  }
985        finally {
986        }
987      }
988      /**
989       * @attribute syn
990       * @aspect Modifiers
991       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:245
992       */
993      public boolean isTransient() {
994        ASTNode$State state = state();
995        try {  return getModifiers().isTransient();  }
996        finally {
997        }
998      }
999      /**
1000       * @attribute syn
1001       * @aspect Modifiers
1002       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:246
1003       */
1004      public boolean isVolatile() {
1005        ASTNode$State state = state();
1006        try {  return getModifiers().isVolatile();  }
1007        finally {
1008        }
1009      }
1010      /**
1011       * @attribute syn
1012       * @aspect PrettyPrint
1013       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:800
1014       */
1015      public String dumpString() {
1016        ASTNode$State state = state();
1017        try {  return getClass().getName() + " [" + getID() + "]";  }
1018        finally {
1019        }
1020      }
1021      /**
1022       * @attribute syn
1023       * @aspect TypeAnalysis
1024       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:251
1025       */
1026      public TypeDecl type() {
1027        ASTNode$State state = state();
1028        try {  return getTypeAccess().type();  }
1029        finally {
1030        }
1031      }
1032      /**
1033       * @attribute syn
1034       * @aspect TypeAnalysis
1035       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:271
1036       */
1037      public boolean isVoid() {
1038        ASTNode$State state = state();
1039        try {  return type().isVoid();  }
1040        finally {
1041        }
1042      }
1043      /**
1044       * @attribute syn
1045       * @aspect Variables
1046       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:32
1047       */
1048      public boolean isParameter() {
1049        ASTNode$State state = state();
1050        try {  return false;  }
1051        finally {
1052        }
1053      }
1054      /**
1055       * @attribute syn
1056       * @aspect Variables
1057       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:34
1058       */
1059      public boolean isClassVariable() {
1060        ASTNode$State state = state();
1061        try {  return isStatic() || hostType().isInterfaceDecl();  }
1062        finally {
1063        }
1064      }
1065      /**
1066       * @attribute syn
1067       * @aspect Variables
1068       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:35
1069       */
1070      public boolean isInstanceVariable() {
1071        ASTNode$State state = state();
1072        try {  return (hostType().isClassDecl() || hostType().isAnonymous() )&& !isStatic();  }
1073        finally {
1074        }
1075      }
1076      /**
1077       * @attribute syn
1078       * @aspect Variables
1079       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:36
1080       */
1081      public boolean isMethodParameter() {
1082        ASTNode$State state = state();
1083        try {  return false;  }
1084        finally {
1085        }
1086      }
1087      /**
1088       * @attribute syn
1089       * @aspect Variables
1090       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:37
1091       */
1092      public boolean isConstructorParameter() {
1093        ASTNode$State state = state();
1094        try {  return false;  }
1095        finally {
1096        }
1097      }
1098      /**
1099       * @attribute syn
1100       * @aspect Variables
1101       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:38
1102       */
1103      public boolean isExceptionHandlerParameter() {
1104        ASTNode$State state = state();
1105        try {  return false;  }
1106        finally {
1107        }
1108      }
1109      /**
1110       * @attribute syn
1111       * @aspect Variables
1112       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:39
1113       */
1114      public boolean isLocalVariable() {
1115        ASTNode$State state = state();
1116        try {  return false;  }
1117        finally {
1118        }
1119      }
1120      /**
1121       * @attribute syn
1122       * @aspect Variables
1123       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:41
1124       */
1125      public boolean isBlank() {
1126        ASTNode$State state = state();
1127        try {  return !hasInit();  }
1128        finally {
1129        }
1130      }
1131      /**
1132       * @attribute syn
1133       * @aspect Variables
1134       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:43
1135       */
1136      public String name() {
1137        ASTNode$State state = state();
1138        try {  return getID();  }
1139        finally {
1140        }
1141      }
1142      /**
1143       * @apilevel internal
1144       */
1145      protected boolean constant_computed = false;
1146      /**
1147       * @apilevel internal
1148       */
1149      protected Constant constant_value;
1150      /**
1151       * @attribute syn
1152       * @aspect Variables
1153       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:44
1154       */
1155      @SuppressWarnings({"unchecked", "cast"})
1156      public Constant constant() {
1157        if(constant_computed) {
1158          return constant_value;
1159        }
1160          ASTNode$State state = state();
1161      int num = state.boundariesCrossed;
1162      boolean isFinal = this.is$Final();
1163        constant_value = constant_compute();
1164      if(isFinal && num == state().boundariesCrossed){ constant_computed = true; }
1165            return constant_value;
1166      }
1167      /**
1168       * @apilevel internal
1169       */
1170      private Constant constant_compute() {  return type().cast(getInit().constant());  }
1171      /**
1172       * @apilevel internal
1173       */
1174      protected boolean attributes_computed = false;
1175      /**
1176       * @apilevel internal
1177       */
1178      protected Collection attributes_value;
1179      /**
1180       * @attribute syn
1181       * @aspect GenericsCodegen
1182       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:324
1183       */
1184      @SuppressWarnings({"unchecked", "cast"})
1185      public Collection attributes() {
1186        if(attributes_computed) {
1187          return attributes_value;
1188        }
1189          ASTNode$State state = state();
1190      int num = state.boundariesCrossed;
1191      boolean isFinal = this.is$Final();
1192        attributes_value = attributes_compute();
1193      if(isFinal && num == state().boundariesCrossed){ attributes_computed = true; }
1194            return attributes_value;
1195      }
1196      /**
1197       * @apilevel internal
1198       */
1199      private Collection attributes_compute() {
1200        Collection c = refined_AnnotationsCodegen_FieldDeclaration_attributes();
1201        if(needsSignatureAttribute())
1202          c.add(new SignatureAttribute(hostType().constantPool(), type().fieldTypeSignature()));
1203        return c;
1204      }
1205      /**
1206       * @apilevel internal
1207       */
1208      protected boolean flags_computed = false;
1209      /**
1210       * @apilevel internal
1211       */
1212      protected int flags_value;
1213      /**
1214       * @attribute syn
1215       * @aspect Flags
1216       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Flags.jrag:76
1217       */
1218      @SuppressWarnings({"unchecked", "cast"})
1219      public int flags() {
1220        if(flags_computed) {
1221          return flags_value;
1222        }
1223          ASTNode$State state = state();
1224      int num = state.boundariesCrossed;
1225      boolean isFinal = this.is$Final();
1226        flags_value = flags_compute();
1227      if(isFinal && num == state().boundariesCrossed){ flags_computed = true; }
1228            return flags_value;
1229      }
1230      /**
1231       * @apilevel internal
1232       */
1233      private int flags_compute() {
1234        int res = 0;
1235        if(isPublic()) res |= Modifiers.ACC_PUBLIC;
1236        if(isPrivate()) res |= Modifiers.ACC_PRIVATE;
1237        if(isProtected()) res |= Modifiers.ACC_PROTECTED;
1238        if(isStatic()) res |= Modifiers.ACC_STATIC;
1239        if(isFinal()) res |= Modifiers.ACC_FINAL;
1240        if(isVolatile()) res |= Modifiers.ACC_VOLATILE;
1241        if(isTransient()) res |= Modifiers.ACC_TRANSIENT;
1242        return res;
1243      }
1244      /**
1245       * @attribute syn
1246       * @aspect GenerateClassfile
1247       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:293
1248       */
1249      public boolean isBytecodeField() {
1250        ASTNode$State state = state();
1251        try {  return true;  }
1252        finally {
1253        }
1254      }
1255      /**
1256       * @attribute syn
1257       * @aspect GenerateClassfile
1258       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:325
1259       */
1260      public boolean flush() {
1261        ASTNode$State state = state();
1262        try {  return false;  }
1263        finally {
1264        }
1265      }
1266      /**
1267       * @attribute syn
1268       * @aspect Annotations
1269       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:283
1270       */
1271      public boolean hasAnnotationSuppressWarnings(String s) {
1272        ASTNode$State state = state();
1273        try {  return getModifiers().hasAnnotationSuppressWarnings(s);  }
1274        finally {
1275        }
1276      }
1277      /**
1278       * @attribute syn
1279       * @aspect Annotations
1280       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:325
1281       */
1282      public boolean isDeprecated() {
1283        ASTNode$State state = state();
1284        try {  return getModifiers().hasDeprecatedAnnotation();  }
1285        finally {
1286        }
1287      }
1288      /**
1289       * @apilevel internal
1290       */
1291      protected boolean usesTypeVariable_computed = false;
1292      /**
1293       * @apilevel internal
1294       */
1295      protected boolean usesTypeVariable_value;
1296      /**
1297       * @attribute syn
1298       * @aspect LookupParTypeDecl
1299       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1065
1300       */
1301      @SuppressWarnings({"unchecked", "cast"})
1302      public boolean usesTypeVariable() {
1303        if(usesTypeVariable_computed) {
1304          return usesTypeVariable_value;
1305        }
1306          ASTNode$State state = state();
1307      int num = state.boundariesCrossed;
1308      boolean isFinal = this.is$Final();
1309        usesTypeVariable_value = usesTypeVariable_compute();
1310      if(isFinal && num == state().boundariesCrossed){ usesTypeVariable_computed = true; }
1311            return usesTypeVariable_value;
1312      }
1313      /**
1314       * @apilevel internal
1315       */
1316      private boolean usesTypeVariable_compute() {  return getTypeAccess().usesTypeVariable();  }
1317      /**
1318       * @apilevel internal
1319       */
1320      protected boolean sourceVariableDecl_computed = false;
1321      /**
1322       * @apilevel internal
1323       */
1324      protected Variable sourceVariableDecl_value;
1325      /**
1326       * @attribute syn
1327       * @aspect SourceDeclarations
1328       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1521
1329       */
1330      @SuppressWarnings({"unchecked", "cast"})
1331      public Variable sourceVariableDecl() {
1332        if(sourceVariableDecl_computed) {
1333          return sourceVariableDecl_value;
1334        }
1335          ASTNode$State state = state();
1336      int num = state.boundariesCrossed;
1337      boolean isFinal = this.is$Final();
1338        sourceVariableDecl_value = sourceVariableDecl_compute();
1339      if(isFinal && num == state().boundariesCrossed){ sourceVariableDecl_computed = true; }
1340            return sourceVariableDecl_value;
1341      }
1342      /**
1343       * @apilevel internal
1344       */
1345      private Variable sourceVariableDecl_compute() {  return this;  }
1346      /**
1347       * @attribute syn
1348       * @aspect GenericsParTypeDecl
1349       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsParTypeDecl.jrag:67
1350       */
1351      public boolean visibleTypeParameters() {
1352        ASTNode$State state = state();
1353        try {  return !isStatic();  }
1354        finally {
1355        }
1356      }
1357      /**
1358       * @attribute syn
1359       * @aspect GenericsCodegen
1360       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:53
1361       */
1362      public FieldDeclaration erasedField() {
1363        ASTNode$State state = state();
1364        try {  return this;  }
1365        finally {
1366        }
1367      }
1368      /**
1369       * @attribute syn
1370       * @aspect GenericsCodegen
1371       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:362
1372       */
1373      public boolean needsSignatureAttribute() {
1374        ASTNode$State state = state();
1375        try {  return type().needsSignatureAttribute();  }
1376        finally {
1377        }
1378      }
1379      /**
1380       * @apilevel internal
1381       */
1382      protected boolean throwTypes_computed = false;
1383      /**
1384       * @apilevel internal
1385       */
1386      protected Collection<TypeDecl> throwTypes_value;
1387      /**
1388       * @attribute syn
1389       * @aspect PreciseRethrow
1390       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:22
1391       */
1392      @SuppressWarnings({"unchecked", "cast"})
1393      public Collection<TypeDecl> throwTypes() {
1394        if(throwTypes_computed) {
1395          return throwTypes_value;
1396        }
1397          ASTNode$State state = state();
1398      int num = state.boundariesCrossed;
1399      boolean isFinal = this.is$Final();
1400        throwTypes_value = throwTypes_compute();
1401      if(isFinal && num == state().boundariesCrossed){ throwTypes_computed = true; }
1402            return throwTypes_value;
1403      }
1404      /**
1405       * @apilevel internal
1406       */
1407      private Collection<TypeDecl> throwTypes_compute() {
1408             Collection<TypeDecl> tts = new LinkedList<TypeDecl>();
1409             tts.add(type());
1410             return tts;
1411     }
1412      /**
1413      * @return true if the modifier list includes the SafeVarargs annotation
1414      * @attribute syn
1415       * @aspect SafeVarargs
1416       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SafeVarargs.jrag:20
1417       */
1418      public boolean hasAnnotationSafeVarargs() {
1419        ASTNode$State state = state();
1420        try {  return getModifiers().hasAnnotationSafeVarargs();  }
1421        finally {
1422        }
1423      }
1424      /**
1425       * @attribute syn
1426       * @aspect SuppressWarnings
1427       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:22
1428       */
1429      public boolean suppressWarnings(String type) {
1430        ASTNode$State state = state();
1431        try {  return hasAnnotationSuppressWarnings(type) || withinSuppressWarnings(type);  }
1432        finally {
1433        }
1434      }
1435      /**
1436       * @attribute inh
1437       * @aspect ExceptionHandling
1438       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:48
1439       */
1440      @SuppressWarnings({"unchecked", "cast"})
1441      public boolean handlesException(TypeDecl exceptionType) {
1442          ASTNode$State state = state();
1443        boolean handlesException_TypeDecl_value = getParent().Define_boolean_handlesException(this, null, exceptionType);
1444            return handlesException_TypeDecl_value;
1445      }
1446      /**
1447       * @attribute inh
1448       * @aspect SuppressWarnings
1449       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:14
1450       */
1451      @SuppressWarnings({"unchecked", "cast"})
1452      public boolean withinSuppressWarnings(String s) {
1453          ASTNode$State state = state();
1454        boolean withinSuppressWarnings_String_value = getParent().Define_boolean_withinSuppressWarnings(this, null, s);
1455            return withinSuppressWarnings_String_value;
1456      }
1457      /**
1458       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:39
1459       * @apilevel internal
1460       */
1461      public boolean Define_boolean_isSource(ASTNode caller, ASTNode child) {
1462        if(caller == getInitOptNoTransform()) {
1463          return true;
1464        }
1465        else {      return getParent().Define_boolean_isSource(this, caller);
1466        }
1467      }
1468      /**
1469       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:320
1470       * @apilevel internal
1471       */
1472      public boolean Define_boolean_isDAbefore(ASTNode caller, ASTNode child, Variable v) {
1473        if(caller == getInitOptNoTransform()){
1474        return isDAbefore(v);
1475      }
1476        else {      return getParent().Define_boolean_isDAbefore(this, caller, v);
1477        }
1478      }
1479      /**
1480       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:166
1481       * @apilevel internal
1482       */
1483      public boolean Define_boolean_handlesException(ASTNode caller, ASTNode child, TypeDecl exceptionType) {
1484        if(caller == getInitOptNoTransform()){
1485        if(hostType().isAnonymous())
1486          return true;
1487        if(!exceptionType.isUncheckedException())
1488          return true;
1489        for(Iterator iter = hostType().constructors().iterator(); iter.hasNext(); ) {
1490          ConstructorDecl decl = (ConstructorDecl)iter.next();
1491          if(!decl.throwsException(exceptionType))
1492            return false;
1493        }
1494        return true;
1495      }
1496        else {      return getParent().Define_boolean_handlesException(this, caller, exceptionType);
1497        }
1498      }
1499      /**
1500       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:262
1501       * @apilevel internal
1502       */
1503      public boolean Define_boolean_mayBePublic(ASTNode caller, ASTNode child) {
1504        if(caller == getModifiersNoTransform()) {
1505          return true;
1506        }
1507        else {      return getParent().Define_boolean_mayBePublic(this, caller);
1508        }
1509      }
1510      /**
1511       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:263
1512       * @apilevel internal
1513       */
1514      public boolean Define_boolean_mayBeProtected(ASTNode caller, ASTNode child) {
1515        if(caller == getModifiersNoTransform()) {
1516          return true;
1517        }
1518        else {      return getParent().Define_boolean_mayBeProtected(this, caller);
1519        }
1520      }
1521      /**
1522       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:264
1523       * @apilevel internal
1524       */
1525      public boolean Define_boolean_mayBePrivate(ASTNode caller, ASTNode child) {
1526        if(caller == getModifiersNoTransform()) {
1527          return true;
1528        }
1529        else {      return getParent().Define_boolean_mayBePrivate(this, caller);
1530        }
1531      }
1532      /**
1533       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:265
1534       * @apilevel internal
1535       */
1536      public boolean Define_boolean_mayBeStatic(ASTNode caller, ASTNode child) {
1537        if(caller == getModifiersNoTransform()) {
1538          return true;
1539        }
1540        else {      return getParent().Define_boolean_mayBeStatic(this, caller);
1541        }
1542      }
1543      /**
1544       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:266
1545       * @apilevel internal
1546       */
1547      public boolean Define_boolean_mayBeFinal(ASTNode caller, ASTNode child) {
1548        if(caller == getModifiersNoTransform()) {
1549          return true;
1550        }
1551        else {      return getParent().Define_boolean_mayBeFinal(this, caller);
1552        }
1553      }
1554      /**
1555       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:267
1556       * @apilevel internal
1557       */
1558      public boolean Define_boolean_mayBeTransient(ASTNode caller, ASTNode child) {
1559        if(caller == getModifiersNoTransform()) {
1560          return true;
1561        }
1562        else {      return getParent().Define_boolean_mayBeTransient(this, caller);
1563        }
1564      }
1565      /**
1566       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:268
1567       * @apilevel internal
1568       */
1569      public boolean Define_boolean_mayBeVolatile(ASTNode caller, ASTNode child) {
1570        if(caller == getModifiersNoTransform()) {
1571          return true;
1572        }
1573        else {      return getParent().Define_boolean_mayBeVolatile(this, caller);
1574        }
1575      }
1576      /**
1577       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:78
1578       * @apilevel internal
1579       */
1580      public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) {
1581        if(caller == getTypeAccessNoTransform()) {
1582          return NameType.TYPE_NAME;
1583        }
1584        else {      return getParent().Define_NameType_nameType(this, caller);
1585        }
1586      }
1587      /**
1588       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:260
1589       * @apilevel internal
1590       */
1591      public TypeDecl Define_TypeDecl_declType(ASTNode caller, ASTNode child) {
1592        if(caller == getInitOptNoTransform()) {
1593          return type();
1594        }
1595        else {      return getParent().Define_TypeDecl_declType(this, caller);
1596        }
1597      }
1598      /**
1599       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:141
1600       * @apilevel internal
1601       */
1602      public boolean Define_boolean_inStaticContext(ASTNode caller, ASTNode child) {
1603        if(caller == getInitOptNoTransform()) {
1604          return isStatic() || hostType().isInterfaceDecl();
1605        }
1606        else {      return getParent().Define_boolean_inStaticContext(this, caller);
1607        }
1608      }
1609      /**
1610       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:67
1611       * @apilevel internal
1612       */
1613      public TypeDecl Define_TypeDecl_expectedType(ASTNode caller, ASTNode child) {
1614        if(caller == getInitOptNoTransform()) {
1615          return type().componentType();
1616        }
1617        else {      return getParent().Define_TypeDecl_expectedType(this, caller);
1618        }
1619      }
1620      /**
1621       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:80
1622       * @apilevel internal
1623       */
1624      public boolean Define_boolean_mayUseAnnotationTarget(ASTNode caller, ASTNode child, String name) {
1625        if(caller == getModifiersNoTransform()) {
1626          return name.equals("FIELD");
1627        }
1628        else {      return getParent().Define_boolean_mayUseAnnotationTarget(this, caller, name);
1629        }
1630      }
1631      /**
1632       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericMethodsInference.jrag:35
1633       * @apilevel internal
1634       */
1635      public TypeDecl Define_TypeDecl_assignConvertedType(ASTNode caller, ASTNode child) {
1636        if(caller == getInitOptNoTransform()) {
1637          return type();
1638        }
1639        else {      return getParent().Define_TypeDecl_assignConvertedType(this, caller);
1640        }
1641      }
1642      /**
1643       * @apilevel internal
1644       */
1645      public ASTNode rewriteTo() {
1646        return super.rewriteTo();
1647      }
1648    }