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     * A parameter declaration as used in either method parameter lists
015     * or as a catch clause parameter.
016     * @production ParameterDeclaration : {@link ASTNode} ::= <span class="component">{@link Modifiers}</span> <span class="component">TypeAccess:{@link Access}</span> <span class="component">&lt;ID:String&gt;</span>;
017     * @ast node
018     * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:91
019     */
020    public class ParameterDeclaration extends ASTNode<ASTNode> implements Cloneable, SimpleSet, Iterator, Variable {
021      /**
022       * @apilevel low-level
023       */
024      public void flushCache() {
025      }
026      /**
027       * @apilevel internal
028       */
029      public void flushCollectionCache() {
030      }
031      /**
032       * @apilevel internal
033       */
034      @SuppressWarnings({"unchecked", "cast"})
035      public ParameterDeclaration clone() throws CloneNotSupportedException {
036        ParameterDeclaration node = (ParameterDeclaration)super.clone();
037        node.type_computed = false;
038        node.type_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 ParameterDeclaration copy() {
053      
054      try {
055        ParameterDeclaration node = (ParameterDeclaration) 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 ParameterDeclaration fullCopy() {
073      
074      ParameterDeclaration tree = (ParameterDeclaration) 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:117
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:121
099       */
100      public boolean isSingleton() { return true; }
101      /**
102       * @ast method 
103       * @aspect DataStructures
104       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:122
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:125
111       */
112      
113      private ParameterDeclaration iterElem;
114      /**
115       * @ast method 
116       * @aspect DataStructures
117       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:126
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:127
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:128
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:129
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:11
142       */
143      public ParameterDeclaration(Access type, String name) {
144        this(new Modifiers(new List()), type, name);
145      }
146      /**
147       * @ast method 
148       * @aspect NodeConstructors
149       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NodeConstructors.jrag:14
150       */
151      public ParameterDeclaration(TypeDecl type, String name) {
152        this(new Modifiers(new List()), type.createQualifiedAccess(), name);
153      }
154      /**
155       * @ast method 
156       * @aspect PrettyPrint
157       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:233
158       */
159      public void toString(StringBuffer s) {
160        getModifiers().toString(s);
161        getTypeAccess().toString(s);
162        s.append(" " + name());
163      }
164      /**
165       * @ast method 
166       * 
167       */
168      public ParameterDeclaration() {
169        super();
170    
171    
172      }
173      /**
174       * Initializes the child array to the correct size.
175       * Initializes List and Opt nta children.
176       * @apilevel internal
177       * @ast method
178       * @ast method 
179       * 
180       */
181      public void init$Children() {
182        children = new ASTNode[2];
183      }
184      /**
185       * @ast method 
186       * 
187       */
188      public ParameterDeclaration(Modifiers p0, Access p1, String p2) {
189        setChild(p0, 0);
190        setChild(p1, 1);
191        setID(p2);
192      }
193      /**
194       * @ast method 
195       * 
196       */
197      public ParameterDeclaration(Modifiers p0, Access p1, beaver.Symbol p2) {
198        setChild(p0, 0);
199        setChild(p1, 1);
200        setID(p2);
201      }
202      /**
203       * @apilevel low-level
204       * @ast method 
205       * 
206       */
207      protected int numChildren() {
208        return 2;
209      }
210      /**
211       * @apilevel internal
212       * @ast method 
213       * 
214       */
215      public boolean mayHaveRewrite() {
216        return false;
217      }
218      /**
219       * Replaces the Modifiers child.
220       * @param node The new node to replace the Modifiers child.
221       * @apilevel high-level
222       * @ast method 
223       * 
224       */
225      public void setModifiers(Modifiers node) {
226        setChild(node, 0);
227      }
228      /**
229       * Retrieves the Modifiers child.
230       * @return The current node used as the Modifiers child.
231       * @apilevel high-level
232       * @ast method 
233       * 
234       */
235      public Modifiers getModifiers() {
236        return (Modifiers)getChild(0);
237      }
238      /**
239       * Retrieves the Modifiers child.
240       * <p><em>This method does not invoke AST transformations.</em></p>
241       * @return The current node used as the Modifiers child.
242       * @apilevel low-level
243       * @ast method 
244       * 
245       */
246      public Modifiers getModifiersNoTransform() {
247        return (Modifiers)getChildNoTransform(0);
248      }
249      /**
250       * Replaces the TypeAccess child.
251       * @param node The new node to replace the TypeAccess child.
252       * @apilevel high-level
253       * @ast method 
254       * 
255       */
256      public void setTypeAccess(Access node) {
257        setChild(node, 1);
258      }
259      /**
260       * Retrieves the TypeAccess child.
261       * @return The current node used as the TypeAccess child.
262       * @apilevel high-level
263       * @ast method 
264       * 
265       */
266      public Access getTypeAccess() {
267        return (Access)getChild(1);
268      }
269      /**
270       * Retrieves the TypeAccess child.
271       * <p><em>This method does not invoke AST transformations.</em></p>
272       * @return The current node used as the TypeAccess child.
273       * @apilevel low-level
274       * @ast method 
275       * 
276       */
277      public Access getTypeAccessNoTransform() {
278        return (Access)getChildNoTransform(1);
279      }
280      /**
281       * Replaces the lexeme ID.
282       * @param value The new value for the lexeme ID.
283       * @apilevel high-level
284       * @ast method 
285       * 
286       */
287      public void setID(String value) {
288        tokenString_ID = value;
289      }
290      /**
291       * @apilevel internal
292       * @ast method 
293       * 
294       */
295      
296      /**
297       * @apilevel internal
298       */
299      protected String tokenString_ID;
300      /**
301       * @ast method 
302       * 
303       */
304      
305      public int IDstart;
306      /**
307       * @ast method 
308       * 
309       */
310      
311      public int IDend;
312      /**
313       * JastAdd-internal setter for lexeme ID using the Beaver parser.
314       * @apilevel internal
315       * @ast method 
316       * 
317       */
318      public void setID(beaver.Symbol symbol) {
319        if(symbol.value != null && !(symbol.value instanceof String))
320          throw new UnsupportedOperationException("setID is only valid for String lexemes");
321        tokenString_ID = (String)symbol.value;
322        IDstart = symbol.getStart();
323        IDend = symbol.getEnd();
324      }
325      /**
326       * Retrieves the value for the lexeme ID.
327       * @return The value for the lexeme ID.
328       * @apilevel high-level
329       * @ast method 
330       * 
331       */
332      public String getID() {
333        return tokenString_ID != null ? tokenString_ID : "";
334      }
335      /**
336       * @ast method 
337       * @aspect MultiCatch
338       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/MultiCatch.jrag:214
339       */
340       
341       public void nameCheck() {
342               SimpleSet decls = outerScope().lookupVariable(name());
343               for(Iterator iter = decls.iterator(); iter.hasNext(); ) {
344                       Variable var = (Variable)iter.next();
345                       if(var instanceof VariableDeclaration) {
346                               VariableDeclaration decl = (VariableDeclaration)var;
347                               if (decl.enclosingBodyDecl() == enclosingBodyDecl())
348                                       error("duplicate declaration of parameter " + name());
349                       } else if(var instanceof ParameterDeclaration) {
350                               ParameterDeclaration decl = (ParameterDeclaration)var;
351                               if(decl.enclosingBodyDecl() == enclosingBodyDecl())
352                                       error("duplicate declaration of parameter " + name());
353                       } else if(var instanceof CatchParameterDeclaration) {
354                               CatchParameterDeclaration decl = (CatchParameterDeclaration)var;
355                               if(decl.enclosingBodyDecl() == enclosingBodyDecl())
356                                       error("duplicate declaration of parameter " + name());
357                       }
358               }
359    
360               // 8.4.1  
361               if(!lookupVariable(name()).contains(this)) {
362                       error("duplicate declaration of parameter " + name());
363               }
364       }
365      /**
366       * @attribute syn
367       * @aspect DataStructures
368       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:115
369       */
370      public int size() {
371        ASTNode$State state = state();
372        try {  return 1;  }
373        finally {
374        }
375      }
376      /**
377       * @attribute syn
378       * @aspect DataStructures
379       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:116
380       */
381      public boolean isEmpty() {
382        ASTNode$State state = state();
383        try {  return false;  }
384        finally {
385        }
386      }
387      /**
388       * @attribute syn
389       * @aspect DataStructures
390       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:120
391       */
392      public boolean contains(Object o) {
393        ASTNode$State state = state();
394        try {  return this == o;  }
395        finally {
396        }
397      }
398      /**
399       * @attribute syn
400       * @aspect Modifiers
401       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:220
402       */
403      public boolean isSynthetic() {
404        ASTNode$State state = state();
405        try {  return getModifiers().isSynthetic();  }
406        finally {
407        }
408      }
409      /**
410       * @attribute syn
411       * @aspect PrettyPrint
412       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:800
413       */
414      public String dumpString() {
415        ASTNode$State state = state();
416        try {  return getClass().getName() + " [" + getID() + "]";  }
417        finally {
418        }
419      }
420      /**
421       * @apilevel internal
422       */
423      protected boolean type_computed = false;
424      /**
425       * @apilevel internal
426       */
427      protected TypeDecl type_value;
428      /**
429       * @attribute syn
430       * @aspect TypeAnalysis
431       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:253
432       */
433      @SuppressWarnings({"unchecked", "cast"})
434      public TypeDecl type() {
435        if(type_computed) {
436          return type_value;
437        }
438          ASTNode$State state = state();
439      int num = state.boundariesCrossed;
440      boolean isFinal = this.is$Final();
441        type_value = type_compute();
442      if(isFinal && num == state().boundariesCrossed){ type_computed = true; }
443            return type_value;
444      }
445      /**
446       * @apilevel internal
447       */
448      private TypeDecl type_compute() {  return getTypeAccess().type();  }
449      /**
450       * @attribute syn
451       * @aspect Variables
452       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:47
453       */
454      public boolean isParameter() {
455        ASTNode$State state = state();
456        try {  return true;  }
457        finally {
458        }
459      }
460      /**
461       * @attribute syn
462       * @aspect Variables
463       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:50
464       */
465      public boolean isClassVariable() {
466        ASTNode$State state = state();
467        try {  return false;  }
468        finally {
469        }
470      }
471      /**
472       * @attribute syn
473       * @aspect Variables
474       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:51
475       */
476      public boolean isInstanceVariable() {
477        ASTNode$State state = state();
478        try {  return false;  }
479        finally {
480        }
481      }
482      /**
483       * @attribute syn
484       * @aspect Variables
485       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:55
486       */
487      public boolean isLocalVariable() {
488        ASTNode$State state = state();
489        try {  return false;  }
490        finally {
491        }
492      }
493      /**
494       * @attribute syn
495       * @aspect Variables
496       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:73
497       */
498      public boolean isFinal() {
499        ASTNode$State state = state();
500        try {  return getModifiers().isFinal();  }
501        finally {
502        }
503      }
504      /**
505       * @attribute syn
506       * @aspect Variables
507       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:74
508       */
509      public boolean isVolatile() {
510        ASTNode$State state = state();
511        try {  return getModifiers().isVolatile();  }
512        finally {
513        }
514      }
515      /**
516       * @attribute syn
517       * @aspect Variables
518       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:75
519       */
520      public boolean isBlank() {
521        ASTNode$State state = state();
522        try {  return true;  }
523        finally {
524        }
525      }
526      /**
527       * @attribute syn
528       * @aspect Variables
529       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:76
530       */
531      public boolean isStatic() {
532        ASTNode$State state = state();
533        try {  return false;  }
534        finally {
535        }
536      }
537      /**
538       * @attribute syn
539       * @aspect Variables
540       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:78
541       */
542      public String name() {
543        ASTNode$State state = state();
544        try {  return getID();  }
545        finally {
546        }
547      }
548      /**
549       * @attribute syn
550       * @aspect Variables
551       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:80
552       */
553      public boolean hasInit() {
554        ASTNode$State state = state();
555        try {  return false;  }
556        finally {
557        }
558      }
559      /**
560       * @attribute syn
561       * @aspect Variables
562       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:81
563       */
564      public Expr getInit() {
565        ASTNode$State state = state();
566        try { throw new UnsupportedOperationException(); }
567        finally {
568        }
569      }
570      /**
571       * @attribute syn
572       * @aspect Variables
573       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:82
574       */
575      public Constant constant() {
576        ASTNode$State state = state();
577        try { throw new UnsupportedOperationException(); }
578        finally {
579        }
580      }
581      /**
582       * @apilevel internal
583       */
584      protected boolean sourceVariableDecl_computed = false;
585      /**
586       * @apilevel internal
587       */
588      protected Variable sourceVariableDecl_value;
589      /**
590       * @attribute syn
591       * @aspect SourceDeclarations
592       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1523
593       */
594      @SuppressWarnings({"unchecked", "cast"})
595      public Variable sourceVariableDecl() {
596        if(sourceVariableDecl_computed) {
597          return sourceVariableDecl_value;
598        }
599          ASTNode$State state = state();
600      int num = state.boundariesCrossed;
601      boolean isFinal = this.is$Final();
602        sourceVariableDecl_value = sourceVariableDecl_compute();
603      if(isFinal && num == state().boundariesCrossed){ sourceVariableDecl_computed = true; }
604            return sourceVariableDecl_value;
605      }
606      /**
607       * @apilevel internal
608       */
609      private Variable sourceVariableDecl_compute() {  return this;  }
610      /**
611       * @attribute syn
612       * @aspect VariableArityParameters
613       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/VariableArityParameters.jrag:35
614       */
615      public boolean isVariableArity() {
616        ASTNode$State state = state();
617        try {  return false;  }
618        finally {
619        }
620      }
621      /**
622       * @apilevel internal
623       */
624      protected boolean throwTypes_computed = false;
625      /**
626       * @apilevel internal
627       */
628      protected Collection<TypeDecl> throwTypes_value;
629      /**
630       * @attribute syn
631       * @aspect PreciseRethrow
632       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:27
633       */
634      @SuppressWarnings({"unchecked", "cast"})
635      public Collection<TypeDecl> throwTypes() {
636        if(throwTypes_computed) {
637          return throwTypes_value;
638        }
639          ASTNode$State state = state();
640      int num = state.boundariesCrossed;
641      boolean isFinal = this.is$Final();
642        throwTypes_value = throwTypes_compute();
643      if(isFinal && num == state().boundariesCrossed){ throwTypes_computed = true; }
644            return throwTypes_value;
645      }
646      /**
647       * @apilevel internal
648       */
649      private Collection<TypeDecl> throwTypes_compute() {
650               if (isCatchParam() && effectivelyFinal()) {
651                       // the catch parameter must be final or implicitly
652                       // final (multi-catch)
653                       return catchClause().caughtExceptions();
654               } else {
655                       Collection<TypeDecl> tts = new LinkedList<TypeDecl>();
656                       tts.add(type());
657                       return tts;
658               }
659       }
660      /**
661       * @attribute syn
662       * @aspect PreciseRethrow
663       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:41
664       */
665      public boolean effectivelyFinal() {
666        ASTNode$State state = state();
667        try {  return isFinal() || !inhModifiedInScope(this);  }
668        finally {
669        }
670      }
671      /**
672        * Builds a copy of this ParameterDeclaration node where all occurrences
673        * of type variables in the original type parameter list have been replaced
674        * by the substitution type parameters.
675        *
676        * @return the substituted ParameterDeclaration node
677        * @attribute syn
678       * @aspect TypeInference
679       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/TypeInference.jrag:391
680       */
681      public ParameterDeclaration substituted(Collection<TypeVariable> original, List<TypeVariable> substitution) {
682        ASTNode$State state = state();
683        try {  return new ParameterDeclaration(
684                               (Modifiers) getModifiers().cloneSubtree(),
685                               getTypeAccess().substituted(original, substitution),
686                               getID());  }
687        finally {
688        }
689      }
690      /**
691       * @attribute inh
692       * @aspect VariableScope
693       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:22
694       */
695      @SuppressWarnings({"unchecked", "cast"})
696      public SimpleSet lookupVariable(String name) {
697          ASTNode$State state = state();
698        SimpleSet lookupVariable_String_value = getParent().Define_SimpleSet_lookupVariable(this, null, name);
699            return lookupVariable_String_value;
700      }
701      /**
702       * @attribute inh
703       * @aspect NameCheck
704       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:293
705       */
706      @SuppressWarnings({"unchecked", "cast"})
707      public VariableScope outerScope() {
708          ASTNode$State state = state();
709        VariableScope outerScope_value = getParent().Define_VariableScope_outerScope(this, null);
710            return outerScope_value;
711      }
712      /**
713       * @attribute inh
714       * @aspect NameCheck
715       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:354
716       */
717      @SuppressWarnings({"unchecked", "cast"})
718      public BodyDecl enclosingBodyDecl() {
719          ASTNode$State state = state();
720        BodyDecl enclosingBodyDecl_value = getParent().Define_BodyDecl_enclosingBodyDecl(this, null);
721            return enclosingBodyDecl_value;
722      }
723      /**
724       * @attribute inh
725       * @aspect NestedTypes
726       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:589
727       */
728      @SuppressWarnings({"unchecked", "cast"})
729      public TypeDecl hostType() {
730          ASTNode$State state = state();
731        TypeDecl hostType_value = getParent().Define_TypeDecl_hostType(this, null);
732            return hostType_value;
733      }
734      /**
735       * @attribute inh
736       * @aspect Variables
737       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:52
738       */
739      @SuppressWarnings({"unchecked", "cast"})
740      public boolean isMethodParameter() {
741          ASTNode$State state = state();
742        boolean isMethodParameter_value = getParent().Define_boolean_isMethodParameter(this, null);
743            return isMethodParameter_value;
744      }
745      /**
746       * @attribute inh
747       * @aspect Variables
748       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:53
749       */
750      @SuppressWarnings({"unchecked", "cast"})
751      public boolean isConstructorParameter() {
752          ASTNode$State state = state();
753        boolean isConstructorParameter_value = getParent().Define_boolean_isConstructorParameter(this, null);
754            return isConstructorParameter_value;
755      }
756      /**
757       * @attribute inh
758       * @aspect Variables
759       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:54
760       */
761      @SuppressWarnings({"unchecked", "cast"})
762      public boolean isExceptionHandlerParameter() {
763          ASTNode$State state = state();
764        boolean isExceptionHandlerParameter_value = getParent().Define_boolean_isExceptionHandlerParameter(this, null);
765            return isExceptionHandlerParameter_value;
766      }
767      /**
768       * @apilevel internal
769       */
770      protected boolean localNum_computed = false;
771      /**
772       * @apilevel internal
773       */
774      protected int localNum_value;
775      /**
776       * @attribute inh
777       * @aspect LocalNum
778       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:13
779       */
780      @SuppressWarnings({"unchecked", "cast"})
781      public int localNum() {
782        if(localNum_computed) {
783          return localNum_value;
784        }
785          ASTNode$State state = state();
786      int num = state.boundariesCrossed;
787      boolean isFinal = this.is$Final();
788        localNum_value = getParent().Define_int_localNum(this, null);
789      if(isFinal && num == state().boundariesCrossed){ localNum_computed = true; }
790            return localNum_value;
791      }
792      /**
793        * @return true if the variable var is modified in the local scope
794        * @attribute inh
795       * @aspect PreciseRethrow
796       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:47
797       */
798      @SuppressWarnings({"unchecked", "cast"})
799      public boolean inhModifiedInScope(Variable var) {
800          ASTNode$State state = state();
801        boolean inhModifiedInScope_Variable_value = getParent().Define_boolean_inhModifiedInScope(this, null, var);
802            return inhModifiedInScope_Variable_value;
803      }
804      /**
805        * @return true if this is the parameter declaration of a catch clause
806        * @attribute inh
807       * @aspect PreciseRethrow
808       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:121
809       */
810      @SuppressWarnings({"unchecked", "cast"})
811      public boolean isCatchParam() {
812          ASTNode$State state = state();
813        boolean isCatchParam_value = getParent().Define_boolean_isCatchParam(this, null);
814            return isCatchParam_value;
815      }
816      /**
817       * @attribute inh
818       * @aspect PreciseRethrow
819       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:127
820       */
821      @SuppressWarnings({"unchecked", "cast"})
822      public CatchClause catchClause() {
823          ASTNode$State state = state();
824        CatchClause catchClause_value = getParent().Define_CatchClause_catchClause(this, null);
825            return catchClause_value;
826      }
827      /**
828       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:288
829       * @apilevel internal
830       */
831      public boolean Define_boolean_mayBeFinal(ASTNode caller, ASTNode child) {
832        if(caller == getModifiersNoTransform()) {
833          return true;
834        }
835        else {      return getParent().Define_boolean_mayBeFinal(this, caller);
836        }
837      }
838      /**
839       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:83
840       * @apilevel internal
841       */
842      public boolean Define_boolean_mayUseAnnotationTarget(ASTNode caller, ASTNode child, String name) {
843        if(caller == getModifiersNoTransform()) {
844          return name.equals("PARAMETER");
845        }
846        else {      return getParent().Define_boolean_mayUseAnnotationTarget(this, caller, name);
847        }
848      }
849      /**
850       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Enums.jrag:79
851       * @apilevel internal
852       */
853      public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) {
854        if(caller == getTypeAccessNoTransform()) {
855          return NameType.TYPE_NAME;
856        }
857        else {      return getParent().Define_NameType_nameType(this, caller);
858        }
859      }
860      /**
861       * @apilevel internal
862       */
863      public ASTNode rewriteTo() {
864        return super.rewriteTo();
865      }
866    }