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 VariableDeclaration : {@link Stmt} ::= <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:83
017     */
018    public class VariableDeclaration extends Stmt 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 VariableDeclaration clone() throws CloneNotSupportedException {
034        VariableDeclaration node = (VariableDeclaration)super.clone();
035        node.isDAafter_Variable_values = null;
036        node.isDUafter_Variable_values = null;
037        node.constant_computed = false;
038        node.constant_value = null;
039        node.sourceVariableDecl_computed = false;
040        node.sourceVariableDecl_value = null;
041        node.throwTypes_computed = false;
042        node.throwTypes_value = null;
043        node.localNum_computed = false;
044        node.in$Circle(false);
045        node.is$Final(false);
046        return node;
047      }
048    /**
049     * @apilevel internal
050     */
051      @SuppressWarnings({"unchecked", "cast"})
052    public VariableDeclaration copy() {
053      
054      try {
055        VariableDeclaration node = (VariableDeclaration) clone();
056        node.parent = null;
057        if(children != null)
058          node.children = (ASTNode[]) children.clone();
059        
060        return node;
061      } catch (CloneNotSupportedException e) {
062        throw new Error("Error: clone not supported for " + getClass().getName());
063      }
064      
065    }/**
066     * Create a deep copy of the AST subtree at this node.
067     * The copy is dangling, i.e. has no parent.
068     * @return dangling copy of the subtree at this node
069     * @apilevel low-level
070     */
071      @SuppressWarnings({"unchecked", "cast"})
072    public VariableDeclaration fullCopy() {
073      
074      VariableDeclaration tree = (VariableDeclaration) copy();
075      if (children != null) {
076        for (int i = 0; i < children.length; ++i) {
077          
078          ASTNode child = (ASTNode) children[i];
079          if(child != null) {
080            child = child.fullCopy();
081            tree.setChild(child, i);
082          }
083        }
084      }
085      return tree;
086      
087    }  /**
088       * @ast method 
089       * @aspect DataStructures
090       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:99
091       */
092      public SimpleSet add(Object o) {
093        return new SimpleSetImpl().add(this).add(o);
094      }
095      /**
096       * @ast method 
097       * @aspect DataStructures
098       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:103
099       */
100      public boolean isSingleton() { return true; }
101      /**
102       * @ast method 
103       * @aspect DataStructures
104       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:104
105       */
106      public boolean isSingleton(Object o) { return contains(o); }
107      /**
108       * @ast method 
109       * @aspect DataStructures
110       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:107
111       */
112      
113      private VariableDeclaration iterElem;
114      /**
115       * @ast method 
116       * @aspect DataStructures
117       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:108
118       */
119      public Iterator iterator() { iterElem = this; return this; }
120      /**
121       * @ast method 
122       * @aspect DataStructures
123       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:109
124       */
125      public boolean hasNext() { return iterElem != null; }
126      /**
127       * @ast method 
128       * @aspect DataStructures
129       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:110
130       */
131      public Object next() { Object o = iterElem; iterElem = null; return o; }
132      /**
133       * @ast method 
134       * @aspect DataStructures
135       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:111
136       */
137      public void remove() { throw new UnsupportedOperationException(); }
138      /**
139       * @ast method 
140       * @aspect NodeConstructors
141       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NodeConstructors.jrag:74
142       */
143      public VariableDeclaration(Access type, String name, Expr init) {
144        this(new Modifiers(new List()), type, name, new Opt(init));
145      }
146      /**
147       * @ast method 
148       * @aspect NodeConstructors
149       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NodeConstructors.jrag:78
150       */
151      public VariableDeclaration(Access type, String name) {
152        this(new Modifiers(new List()), type, name, new Opt());
153      }
154      /**
155       * @ast method 
156       * @aspect PrettyPrint
157       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:164
158       */
159      public void toString(StringBuffer s) {
160        s.append(indent());
161        getModifiers().toString(s);
162        getTypeAccess().toString(s);
163        s.append(" " + name());
164        if(hasInit()) {
165          s.append(" = ");
166          getInit().toString(s);
167        }
168        s.append(";");
169      }
170      /**
171       * @ast method 
172       * @aspect TypeCheck
173       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:22
174       */
175      public void typeCheck() {
176        if(hasInit()) {
177          TypeDecl source = getInit().type();
178          TypeDecl dest = type();
179          if(!source.assignConversionTo(dest, getInit()))
180            error("can not assign variable " + name() + " of type " + dest.typeName() +
181                  " a value of type " + source.typeName());
182        }
183      }
184      /**
185       * @ast method 
186       * @aspect CreateBCode
187       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:237
188       */
189      public void createBCode(CodeGeneration gen) {
190        super.createBCode(gen);
191        if(hasInit()) {
192          gen.addLocalVariableEntryAtCurrentPC(name(), type().typeDescriptor(), localNum(), variableScopeEndLabel(gen));
193          getInit().createBCode(gen);
194          getInit().type().emitAssignConvTo(gen, type()); // AssignConversion
195          type().emitStoreLocal(gen, localNum());
196        }
197      }
198      /**
199       * @ast method 
200       * @aspect UncheckedConversion
201       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/UncheckedConversion.jrag:20
202       */
203      public void checkWarnings() {
204        if (hasInit() && !suppressWarnings("unchecked"))
205          checkUncheckedConversion(getInit().type(), type());
206      }
207      /**
208       * @ast method 
209       * 
210       */
211      public VariableDeclaration() {
212        super();
213    
214    
215      }
216      /**
217       * Initializes the child array to the correct size.
218       * Initializes List and Opt nta children.
219       * @apilevel internal
220       * @ast method
221       * @ast method 
222       * 
223       */
224      public void init$Children() {
225        children = new ASTNode[3];
226        setChild(new Opt(), 2);
227      }
228      /**
229       * @ast method 
230       * 
231       */
232      public VariableDeclaration(Modifiers p0, Access p1, String p2, Opt<Expr> p3) {
233        setChild(p0, 0);
234        setChild(p1, 1);
235        setID(p2);
236        setChild(p3, 2);
237      }
238      /**
239       * @ast method 
240       * 
241       */
242      public VariableDeclaration(Modifiers p0, Access p1, beaver.Symbol p2, Opt<Expr> p3) {
243        setChild(p0, 0);
244        setChild(p1, 1);
245        setID(p2);
246        setChild(p3, 2);
247      }
248      /**
249       * @apilevel low-level
250       * @ast method 
251       * 
252       */
253      protected int numChildren() {
254        return 3;
255      }
256      /**
257       * @apilevel internal
258       * @ast method 
259       * 
260       */
261      public boolean mayHaveRewrite() {
262        return false;
263      }
264      /**
265       * Replaces the Modifiers child.
266       * @param node The new node to replace the Modifiers child.
267       * @apilevel high-level
268       * @ast method 
269       * 
270       */
271      public void setModifiers(Modifiers node) {
272        setChild(node, 0);
273      }
274      /**
275       * Retrieves the Modifiers child.
276       * @return The current node used as the Modifiers child.
277       * @apilevel high-level
278       * @ast method 
279       * 
280       */
281      public Modifiers getModifiers() {
282        return (Modifiers)getChild(0);
283      }
284      /**
285       * Retrieves the Modifiers child.
286       * <p><em>This method does not invoke AST transformations.</em></p>
287       * @return The current node used as the Modifiers child.
288       * @apilevel low-level
289       * @ast method 
290       * 
291       */
292      public Modifiers getModifiersNoTransform() {
293        return (Modifiers)getChildNoTransform(0);
294      }
295      /**
296       * Replaces the TypeAccess child.
297       * @param node The new node to replace the TypeAccess child.
298       * @apilevel high-level
299       * @ast method 
300       * 
301       */
302      public void setTypeAccess(Access node) {
303        setChild(node, 1);
304      }
305      /**
306       * Retrieves the TypeAccess child.
307       * @return The current node used as the TypeAccess child.
308       * @apilevel high-level
309       * @ast method 
310       * 
311       */
312      public Access getTypeAccess() {
313        return (Access)getChild(1);
314      }
315      /**
316       * Retrieves the TypeAccess child.
317       * <p><em>This method does not invoke AST transformations.</em></p>
318       * @return The current node used as the TypeAccess child.
319       * @apilevel low-level
320       * @ast method 
321       * 
322       */
323      public Access getTypeAccessNoTransform() {
324        return (Access)getChildNoTransform(1);
325      }
326      /**
327       * Replaces the lexeme ID.
328       * @param value The new value for the lexeme ID.
329       * @apilevel high-level
330       * @ast method 
331       * 
332       */
333      public void setID(String value) {
334        tokenString_ID = value;
335      }
336      /**
337       * @apilevel internal
338       * @ast method 
339       * 
340       */
341      
342      /**
343       * @apilevel internal
344       */
345      protected String tokenString_ID;
346      /**
347       * @ast method 
348       * 
349       */
350      
351      public int IDstart;
352      /**
353       * @ast method 
354       * 
355       */
356      
357      public int IDend;
358      /**
359       * JastAdd-internal setter for lexeme ID using the Beaver parser.
360       * @apilevel internal
361       * @ast method 
362       * 
363       */
364      public void setID(beaver.Symbol symbol) {
365        if(symbol.value != null && !(symbol.value instanceof String))
366          throw new UnsupportedOperationException("setID is only valid for String lexemes");
367        tokenString_ID = (String)symbol.value;
368        IDstart = symbol.getStart();
369        IDend = symbol.getEnd();
370      }
371      /**
372       * Retrieves the value for the lexeme ID.
373       * @return The value for the lexeme ID.
374       * @apilevel high-level
375       * @ast method 
376       * 
377       */
378      public String getID() {
379        return tokenString_ID != null ? tokenString_ID : "";
380      }
381      /**
382       * Replaces the optional node for the Init child. This is the {@code Opt} node containing the child Init, not the actual child!
383       * @param opt The new node to be used as the optional node for the Init child.
384       * @apilevel low-level
385       * @ast method 
386       * 
387       */
388      public void setInitOpt(Opt<Expr> opt) {
389        setChild(opt, 2);
390      }
391      /**
392       * Check whether the optional Init child exists.
393       * @return {@code true} if the optional Init child exists, {@code false} if it does not.
394       * @apilevel high-level
395       * @ast method 
396       * 
397       */
398      public boolean hasInit() {
399        return getInitOpt().getNumChild() != 0;
400      }
401      /**
402       * Retrieves the (optional) Init child.
403       * @return The Init child, if it exists. Returns {@code null} otherwise.
404       * @apilevel low-level
405       * @ast method 
406       * 
407       */
408      @SuppressWarnings({"unchecked", "cast"})
409      public Expr getInit() {
410        return (Expr)getInitOpt().getChild(0);
411      }
412      /**
413       * Replaces the (optional) Init child.
414       * @param node The new node to be used as the Init child.
415       * @apilevel high-level
416       * @ast method 
417       * 
418       */
419      public void setInit(Expr node) {
420        getInitOpt().setChild(node, 0);
421      }
422      /**
423       * @apilevel low-level
424       * @ast method 
425       * 
426       */
427      @SuppressWarnings({"unchecked", "cast"})
428      public Opt<Expr> getInitOpt() {
429        return (Opt<Expr>)getChild(2);
430      }
431      /**
432       * Retrieves the optional node for child Init. This is the {@code Opt} node containing the child Init, not the actual child!
433       * <p><em>This method does not invoke AST transformations.</em></p>
434       * @return The optional node for child Init.
435       * @apilevel low-level
436       * @ast method 
437       * 
438       */
439      @SuppressWarnings({"unchecked", "cast"})
440      public Opt<Expr> getInitOptNoTransform() {
441        return (Opt<Expr>)getChildNoTransform(2);
442      }
443      /**
444       * @ast method 
445       * @aspect MultiCatch
446       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/MultiCatch.jrag:240
447       */
448       
449       public void nameCheck() {
450               SimpleSet decls = outerScope().lookupVariable(name());
451               for(Iterator iter = decls.iterator(); iter.hasNext(); ) {
452                       Variable var = (Variable)iter.next();
453                       if(var instanceof VariableDeclaration) {
454                               VariableDeclaration decl = (VariableDeclaration)var;
455                               if(decl != this && decl.enclosingBodyDecl() == enclosingBodyDecl())
456                                       error("duplicate declaration of local variable " + name());
457                       }
458                       // 8.4.1
459                       else if(var instanceof ParameterDeclaration) {
460                               ParameterDeclaration decl = (ParameterDeclaration)var;
461                               if(decl.enclosingBodyDecl() == enclosingBodyDecl())
462                                       error("duplicate declaration of local variable " + name());
463                       } else if(var instanceof CatchParameterDeclaration) {
464                               CatchParameterDeclaration decl = (CatchParameterDeclaration)var;
465                               if(decl.enclosingBodyDecl() == enclosingBodyDecl())
466                                       error("duplicate declaration of local variable " + name());
467                       }
468               }
469               if(getParent().getParent() instanceof Block) {
470                       Block block = (Block)getParent().getParent();
471                       for(int i = 0; i < block.getNumStmt(); i++) {
472                               if(block.getStmt(i) instanceof Variable) {
473                                       Variable v = (Variable)block.getStmt(i);
474                                       if(v.name().equals(name()) && v != this) {
475                                               error("duplicate declaration of local variable " + name());
476                                       }
477                               }
478                       }
479               }
480       }
481      /**
482       * @attribute syn
483       * @aspect DataStructures
484       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:97
485       */
486      public int size() {
487        ASTNode$State state = state();
488        try {  return 1;  }
489        finally {
490        }
491      }
492      /**
493       * @attribute syn
494       * @aspect DataStructures
495       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:98
496       */
497      public boolean isEmpty() {
498        ASTNode$State state = state();
499        try {  return false;  }
500        finally {
501        }
502      }
503      /**
504       * @attribute syn
505       * @aspect DataStructures
506       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:102
507       */
508      public boolean contains(Object o) {
509        ASTNode$State state = state();
510        try {  return this == o;  }
511        finally {
512        }
513      }
514      /**
515       * @attribute syn
516       * @aspect DefiniteAssignment
517       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:91
518       */
519      public boolean isBlankFinal() {
520        ASTNode$State state = state();
521        try {  return isFinal() && (!hasInit() || !getInit().isConstant());  }
522        finally {
523        }
524      }
525      /**
526       * @attribute syn
527       * @aspect DefiniteAssignment
528       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:92
529       */
530      public boolean isValue() {
531        ASTNode$State state = state();
532        try {  return isFinal() && hasInit() && getInit().isConstant();  }
533        finally {
534        }
535      }
536      protected java.util.Map isDAafter_Variable_values;
537      /**
538       * @attribute syn
539       * @aspect DA
540       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:492
541       */
542      @SuppressWarnings({"unchecked", "cast"})
543      public boolean isDAafter(Variable v) {
544        Object _parameters = v;
545        if(isDAafter_Variable_values == null) isDAafter_Variable_values = new java.util.HashMap(4);
546        if(isDAafter_Variable_values.containsKey(_parameters)) {
547          return ((Boolean)isDAafter_Variable_values.get(_parameters)).booleanValue();
548        }
549          ASTNode$State state = state();
550      int num = state.boundariesCrossed;
551      boolean isFinal = this.is$Final();
552        boolean isDAafter_Variable_value = isDAafter_compute(v);
553      if(isFinal && num == state().boundariesCrossed){ isDAafter_Variable_values.put(_parameters, Boolean.valueOf(isDAafter_Variable_value)); }
554            return isDAafter_Variable_value;
555      }
556      /**
557       * @apilevel internal
558       */
559      private boolean isDAafter_compute(Variable v) {
560        if(v == this)
561          return hasInit();
562        return hasInit() ? getInit().isDAafter(v) : isDAbefore(v);
563      }
564      protected java.util.Map isDUafter_Variable_values;
565      /**
566       * @attribute syn
567       * @aspect DU
568       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:875
569       */
570      @SuppressWarnings({"unchecked", "cast"})
571      public boolean isDUafter(Variable v) {
572        Object _parameters = v;
573        if(isDUafter_Variable_values == null) isDUafter_Variable_values = new java.util.HashMap(4);
574        if(isDUafter_Variable_values.containsKey(_parameters)) {
575          return ((Boolean)isDUafter_Variable_values.get(_parameters)).booleanValue();
576        }
577          ASTNode$State state = state();
578      int num = state.boundariesCrossed;
579      boolean isFinal = this.is$Final();
580        boolean isDUafter_Variable_value = isDUafter_compute(v);
581      if(isFinal && num == state().boundariesCrossed){ isDUafter_Variable_values.put(_parameters, Boolean.valueOf(isDUafter_Variable_value)); }
582            return isDUafter_Variable_value;
583      }
584      /**
585       * @apilevel internal
586       */
587      private boolean isDUafter_compute(Variable v) {
588        if(v == this)
589          return !hasInit();
590        return hasInit() ? getInit().isDUafter(v) : isDUbefore(v);
591      }
592      /**
593       * @attribute syn
594       * @aspect VariableScope
595       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:129
596       */
597      public boolean declaresVariable(String name) {
598        ASTNode$State state = state();
599        try {  return name().equals(name);  }
600        finally {
601        }
602      }
603      /**
604       * @attribute syn
605       * @aspect Modifiers
606       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:219
607       */
608      public boolean isSynthetic() {
609        ASTNode$State state = state();
610        try {  return getModifiers().isSynthetic();  }
611        finally {
612        }
613      }
614      /**
615       * @attribute syn
616       * @aspect PrettyPrint
617       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:800
618       */
619      public String dumpString() {
620        ASTNode$State state = state();
621        try {  return getClass().getName() + " [" + getID() + "]";  }
622        finally {
623        }
624      }
625      /**
626       * @attribute syn
627       * @aspect TypeAnalysis
628       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:252
629       */
630      public TypeDecl type() {
631        ASTNode$State state = state();
632        try {  return getTypeAccess().type();  }
633        finally {
634        }
635      }
636      /**
637       * @attribute syn
638       * @aspect Variables
639       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:13
640       */
641      public boolean isParameter() {
642        ASTNode$State state = state();
643        try {  return false;  }
644        finally {
645        }
646      }
647      /**
648       * @attribute syn
649       * @aspect Variables
650       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:15
651       */
652      public boolean isClassVariable() {
653        ASTNode$State state = state();
654        try {  return false;  }
655        finally {
656        }
657      }
658      /**
659       * @attribute syn
660       * @aspect Variables
661       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:16
662       */
663      public boolean isInstanceVariable() {
664        ASTNode$State state = state();
665        try {  return false;  }
666        finally {
667        }
668      }
669      /**
670       * @attribute syn
671       * @aspect Variables
672       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:17
673       */
674      public boolean isMethodParameter() {
675        ASTNode$State state = state();
676        try {  return false;  }
677        finally {
678        }
679      }
680      /**
681       * @attribute syn
682       * @aspect Variables
683       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:18
684       */
685      public boolean isConstructorParameter() {
686        ASTNode$State state = state();
687        try {  return false;  }
688        finally {
689        }
690      }
691      /**
692       * @attribute syn
693       * @aspect Variables
694       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:19
695       */
696      public boolean isExceptionHandlerParameter() {
697        ASTNode$State state = state();
698        try {  return false;  }
699        finally {
700        }
701      }
702      /**
703       * @attribute syn
704       * @aspect Variables
705       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:20
706       */
707      public boolean isLocalVariable() {
708        ASTNode$State state = state();
709        try {  return true;  }
710        finally {
711        }
712      }
713      /**
714       * @attribute syn
715       * @aspect Variables
716       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:22
717       */
718      public boolean isFinal() {
719        ASTNode$State state = state();
720        try {  return getModifiers().isFinal();  }
721        finally {
722        }
723      }
724      /**
725       * @attribute syn
726       * @aspect Variables
727       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:23
728       */
729      public boolean isVolatile() {
730        ASTNode$State state = state();
731        try {  return getModifiers().isVolatile();  }
732        finally {
733        }
734      }
735      /**
736       * @attribute syn
737       * @aspect Variables
738       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:24
739       */
740      public boolean isBlank() {
741        ASTNode$State state = state();
742        try {  return !hasInit();  }
743        finally {
744        }
745      }
746      /**
747       * @attribute syn
748       * @aspect Variables
749       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:25
750       */
751      public boolean isStatic() {
752        ASTNode$State state = state();
753        try {  return false;  }
754        finally {
755        }
756      }
757      /**
758       * @attribute syn
759       * @aspect Variables
760       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:27
761       */
762      public String name() {
763        ASTNode$State state = state();
764        try {  return getID();  }
765        finally {
766        }
767      }
768      /**
769       * @apilevel internal
770       */
771      protected boolean constant_computed = false;
772      /**
773       * @apilevel internal
774       */
775      protected Constant constant_value;
776      /**
777       * @attribute syn
778       * @aspect Variables
779       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:29
780       */
781      @SuppressWarnings({"unchecked", "cast"})
782      public Constant constant() {
783        if(constant_computed) {
784          return constant_value;
785        }
786          ASTNode$State state = state();
787      int num = state.boundariesCrossed;
788      boolean isFinal = this.is$Final();
789        constant_value = constant_compute();
790      if(isFinal && num == state().boundariesCrossed){ constant_computed = true; }
791            return constant_value;
792      }
793      /**
794       * @apilevel internal
795       */
796      private Constant constant_compute() {  return type().cast(getInit().constant());  }
797      /**
798       * @apilevel internal
799       */
800      protected boolean sourceVariableDecl_computed = false;
801      /**
802       * @apilevel internal
803       */
804      protected Variable sourceVariableDecl_value;
805      /**
806       * @attribute syn
807       * @aspect SourceDeclarations
808       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1520
809       */
810      @SuppressWarnings({"unchecked", "cast"})
811      public Variable sourceVariableDecl() {
812        if(sourceVariableDecl_computed) {
813          return sourceVariableDecl_value;
814        }
815          ASTNode$State state = state();
816      int num = state.boundariesCrossed;
817      boolean isFinal = this.is$Final();
818        sourceVariableDecl_value = sourceVariableDecl_compute();
819      if(isFinal && num == state().boundariesCrossed){ sourceVariableDecl_computed = true; }
820            return sourceVariableDecl_value;
821      }
822      /**
823       * @apilevel internal
824       */
825      private Variable sourceVariableDecl_compute() {  return this;  }
826      /**
827       * @apilevel internal
828       */
829      protected boolean throwTypes_computed = false;
830      /**
831       * @apilevel internal
832       */
833      protected Collection<TypeDecl> throwTypes_value;
834      /**
835       * @attribute syn
836       * @aspect PreciseRethrow
837       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:17
838       */
839      @SuppressWarnings({"unchecked", "cast"})
840      public Collection<TypeDecl> throwTypes() {
841        if(throwTypes_computed) {
842          return throwTypes_value;
843        }
844          ASTNode$State state = state();
845      int num = state.boundariesCrossed;
846      boolean isFinal = this.is$Final();
847        throwTypes_value = throwTypes_compute();
848      if(isFinal && num == state().boundariesCrossed){ throwTypes_computed = true; }
849            return throwTypes_value;
850      }
851      /**
852       * @apilevel internal
853       */
854      private Collection<TypeDecl> throwTypes_compute() {
855               Collection<TypeDecl> tts = new LinkedList<TypeDecl>();
856               tts.add(type());
857               return tts;
858       }
859      /**
860       * @attribute syn
861       * @aspect PreciseRethrow
862       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:55
863       */
864      public boolean modifiedInScope(Variable var) {
865        ASTNode$State state = state();
866        try {  return false;  }
867        finally {
868        }
869      }
870      /**
871       * @attribute syn
872       * @aspect SuppressWarnings
873       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:10
874       */
875      public boolean hasAnnotationSuppressWarnings(String s) {
876        ASTNode$State state = state();
877        try {  return getModifiers().hasAnnotationSuppressWarnings(s);  }
878        finally {
879        }
880      }
881      /**
882       * @attribute syn
883       * @aspect SuppressWarnings
884       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:20
885       */
886      public boolean suppressWarnings(String type) {
887        ASTNode$State state = state();
888        try {  return hasAnnotationSuppressWarnings(type) || withinSuppressWarnings(type);  }
889        finally {
890        }
891      }
892      /**
893       * @attribute inh
894       * @aspect VariableScope
895       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:21
896       */
897      @SuppressWarnings({"unchecked", "cast"})
898      public SimpleSet lookupVariable(String name) {
899          ASTNode$State state = state();
900        SimpleSet lookupVariable_String_value = getParent().Define_SimpleSet_lookupVariable(this, null, name);
901            return lookupVariable_String_value;
902      }
903      /**
904       * @attribute inh
905       * @aspect NameCheck
906       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:294
907       */
908      @SuppressWarnings({"unchecked", "cast"})
909      public VariableScope outerScope() {
910          ASTNode$State state = state();
911        VariableScope outerScope_value = getParent().Define_VariableScope_outerScope(this, null);
912            return outerScope_value;
913      }
914      /**
915       * @attribute inh
916       * @aspect NestedTypes
917       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:588
918       */
919      @SuppressWarnings({"unchecked", "cast"})
920      public TypeDecl hostType() {
921          ASTNode$State state = state();
922        TypeDecl hostType_value = getParent().Define_TypeDecl_hostType(this, null);
923            return hostType_value;
924      }
925      /**
926       * @attribute inh
927       * @aspect CodeGeneration
928       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:42
929       */
930      @SuppressWarnings({"unchecked", "cast"})
931      public int variableScopeEndLabel(CodeGeneration gen) {
932          ASTNode$State state = state();
933        int variableScopeEndLabel_CodeGeneration_value = getParent().Define_int_variableScopeEndLabel(this, null, gen);
934            return variableScopeEndLabel_CodeGeneration_value;
935      }
936      /**
937       * @apilevel internal
938       */
939      protected boolean localNum_computed = false;
940      /**
941       * @apilevel internal
942       */
943      protected int localNum_value;
944      /**
945       * @attribute inh
946       * @aspect LocalNum
947       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:11
948       */
949      @SuppressWarnings({"unchecked", "cast"})
950      public int localNum() {
951        if(localNum_computed) {
952          return localNum_value;
953        }
954          ASTNode$State state = state();
955      int num = state.boundariesCrossed;
956      boolean isFinal = this.is$Final();
957        localNum_value = getParent().Define_int_localNum(this, null);
958      if(isFinal && num == state().boundariesCrossed){ localNum_computed = true; }
959            return localNum_value;
960      }
961      /**
962       * @attribute inh
963       * @aspect SuppressWarnings
964       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:13
965       */
966      @SuppressWarnings({"unchecked", "cast"})
967      public boolean withinSuppressWarnings(String s) {
968          ASTNode$State state = state();
969        boolean withinSuppressWarnings_String_value = getParent().Define_boolean_withinSuppressWarnings(this, null, s);
970            return withinSuppressWarnings_String_value;
971      }
972      /**
973       * @attribute inh
974       * @aspect TryWithResources
975       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/TryWithResources.jrag:144
976       */
977      @SuppressWarnings({"unchecked", "cast"})
978      public boolean resourcePreviouslyDeclared(String name) {
979          ASTNode$State state = state();
980        boolean resourcePreviouslyDeclared_String_value = getParent().Define_boolean_resourcePreviouslyDeclared(this, null, name);
981            return resourcePreviouslyDeclared_String_value;
982      }
983      /**
984       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:40
985       * @apilevel internal
986       */
987      public boolean Define_boolean_isSource(ASTNode caller, ASTNode child) {
988        if(caller == getInitOptNoTransform()) {
989          return true;
990        }
991        else {      return getParent().Define_boolean_isSource(this, caller);
992        }
993      }
994      /**
995       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:497
996       * @apilevel internal
997       */
998      public boolean Define_boolean_isDAbefore(ASTNode caller, ASTNode child, Variable v) {
999        if(caller == getInitOptNoTransform()) {
1000          return isDAbefore(v);
1001        }
1002        else {      return getParent().Define_boolean_isDAbefore(this, caller, v);
1003        }
1004      }
1005      /**
1006       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:880
1007       * @apilevel internal
1008       */
1009      public boolean Define_boolean_isDUbefore(ASTNode caller, ASTNode child, Variable v) {
1010        if(caller == getInitOptNoTransform()) {
1011          return isDUbefore(v);
1012        }
1013        else {      return getParent().Define_boolean_isDUbefore(this, caller, v);
1014        }
1015      }
1016      /**
1017       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:286
1018       * @apilevel internal
1019       */
1020      public boolean Define_boolean_mayBeFinal(ASTNode caller, ASTNode child) {
1021        if(caller == getModifiersNoTransform()) {
1022          return true;
1023        }
1024        else {      return getParent().Define_boolean_mayBeFinal(this, caller);
1025        }
1026      }
1027      /**
1028       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:85
1029       * @apilevel internal
1030       */
1031      public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) {
1032        if(caller == getTypeAccessNoTransform()) {
1033          return NameType.TYPE_NAME;
1034        }
1035        else {      return getParent().Define_NameType_nameType(this, caller);
1036        }
1037      }
1038      /**
1039       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:261
1040       * @apilevel internal
1041       */
1042      public TypeDecl Define_TypeDecl_declType(ASTNode caller, ASTNode child) {
1043        if(caller == getInitOptNoTransform()) {
1044          return type();
1045        }
1046        else {      return getParent().Define_TypeDecl_declType(this, caller);
1047        }
1048      }
1049      /**
1050       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:68
1051       * @apilevel internal
1052       */
1053      public TypeDecl Define_TypeDecl_expectedType(ASTNode caller, ASTNode child) {
1054        if(caller == getInitOptNoTransform()) {
1055          return type().componentType();
1056        }
1057        else {      return getParent().Define_TypeDecl_expectedType(this, caller);
1058        }
1059      }
1060      /**
1061       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:92
1062       * @apilevel internal
1063       */
1064      public boolean Define_boolean_mayUseAnnotationTarget(ASTNode caller, ASTNode child, String name) {
1065        if(caller == getModifiersNoTransform()) {
1066          return name.equals("LOCAL_VARIABLE");
1067        }
1068        else {      return getParent().Define_boolean_mayUseAnnotationTarget(this, caller, name);
1069        }
1070      }
1071      /**
1072       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericMethodsInference.jrag:34
1073       * @apilevel internal
1074       */
1075      public TypeDecl Define_TypeDecl_assignConvertedType(ASTNode caller, ASTNode child) {
1076        if(caller == getInitOptNoTransform()) {
1077          return type();
1078        }
1079        else {      return getParent().Define_TypeDecl_assignConvertedType(this, caller);
1080        }
1081      }
1082      /**
1083       * @apilevel internal
1084       */
1085      public ASTNode rewriteTo() {
1086        return super.rewriteTo();
1087      }
1088    }