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 Expr : {@link ASTNode};
015     * @ast node
016     * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:104
017     */
018    public abstract class Expr extends ASTNode<ASTNode> implements Cloneable {
019      /**
020       * @apilevel low-level
021       */
022      public void flushCache() {
023      }
024      /**
025       * @apilevel internal
026       */
027      public void flushCollectionCache() {
028      }
029      /**
030       * @apilevel internal
031       */
032      @SuppressWarnings({"unchecked", "cast"})
033      public Expr clone() throws CloneNotSupportedException {
034        Expr node = (Expr)super.clone();
035        node.false_label_computed = false;
036        node.true_label_computed = false;
037        node.in$Circle(false);
038        node.is$Final(false);
039        return node;
040      }
041      /**
042       * @ast method 
043       * @aspect TypeScopePropagation
044       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:461
045       */
046      public SimpleSet keepAccessibleTypes(SimpleSet oldSet) {
047        SimpleSet newSet = SimpleSet.emptySet;
048        TypeDecl hostType = hostType();
049        for(Iterator iter = oldSet.iterator(); iter.hasNext(); ) {
050          TypeDecl t = (TypeDecl)iter.next();
051          if((hostType != null && t.accessibleFrom(hostType)) || (hostType == null && t.accessibleFromPackage(hostPackage())))
052            newSet = newSet.add(t);
053        }
054        return newSet;
055      }
056      /**
057       * Remove fields that are not accessible when using this Expr as qualifier
058       * @return a set containing the accessible fields
059       * @ast method 
060       * @aspect VariableScope
061       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:169
062       */
063      public SimpleSet keepAccessibleFields(SimpleSet oldSet) {
064        SimpleSet newSet = SimpleSet.emptySet;
065        for(Iterator iter = oldSet.iterator(); iter.hasNext(); ) {
066          Variable v = (Variable)iter.next();
067          if(v instanceof FieldDeclaration) {
068            FieldDeclaration f = (FieldDeclaration)v;
069            if(mayAccess(f))
070              newSet = newSet.add(f);
071          }
072        }
073        return newSet;
074      }
075      /**
076       * @see "JLS $6.6.2.1"
077       * @return true if the expression may access the given field
078       * @ast method 
079       * @aspect VariableScope
080       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:196
081       */
082      public boolean mayAccess(FieldDeclaration f) {
083        if(f.isPublic()) {
084          return true;
085        } else if(f.isProtected()) {
086          if(f.hostPackage().equals(hostPackage()))
087            return true;
088          return hostType().mayAccess(this, f);
089        } else if(f.isPrivate()) {
090          return f.hostType().topLevelType() == hostType().topLevelType();
091        } else {
092          return f.hostPackage().equals(hostType().hostPackage());
093        }
094      }
095      /**
096       * @ast method 
097       * @aspect QualifiedNames
098       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:106
099       */
100      public Dot qualifiesAccess(Access access) {
101        Dot dot = new Dot(this, access);
102        dot.setStart(this.getStart());
103        dot.setEnd(access.getEnd());
104        return dot;
105      }
106      /**
107       * @ast method 
108       * @aspect CodeGeneration
109       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:696
110       */
111      public void emitStore(CodeGeneration gen) { error("emitStore called with " + getClass().getName()); }
112      /**
113       * @ast method 
114       * @aspect CodeGenerationBinaryOperations
115       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:1016
116       */
117      void emitOperation(CodeGeneration gen) {error();}
118      /**
119       * @ast method 
120       * @aspect CreateBCode
121       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:211
122       */
123      protected boolean needsPush() {
124        ASTNode n = getParent();
125        while(n instanceof ParExpr)
126          n = n.getParent();
127        return !(n instanceof ExprStmt);
128      }
129      /**
130       * @ast method 
131       * @aspect CreateBCode
132       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:350
133       */
134      public void createAssignSimpleLoadDest(CodeGeneration gen) {
135      }
136      /**
137       * duplicate top value on stack and store below destination element
138       * @ast method 
139       * @aspect CreateBCode
140       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:366
141       */
142      public void createPushAssignmentResult(CodeGeneration gen) {
143      }
144      /**
145       * @ast method 
146       * @aspect CreateBCode
147       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:384
148       */
149      public void createAssignLoadDest(CodeGeneration gen) {
150      }
151      /**
152       * @ast method 
153       * @aspect CreateBCode
154       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1030
155       */
156      protected void emitBooleanCondition(CodeGeneration gen) {
157        emitEvalBranch(gen);
158        int end_label = hostType().constantPool().newLabel();
159        gen.addLabel(false_label());
160        BooleanLiteral.push(gen, false);
161        gen.emitGoto(end_label);
162        gen.changeStackDepth(-1); // discard false from stack depth computation
163        gen.addLabel(true_label());
164        BooleanLiteral.push(gen, true);
165        gen.addLabel(end_label);
166      }
167      /**
168       * @ast method 
169       * @aspect CreateBCode
170       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1068
171       */
172      public void refined_CreateBCode_Expr_emitEvalBranch(CodeGeneration gen) {
173        if(isTrue())
174          gen.emitGoto(true_label());
175        else if(isFalse())
176          gen.emitGoto(false_label());
177        else {
178          createBCode(gen);
179          gen.emitCompare(Bytecode.IFNE, true_label());
180          gen.emitGoto(false_label());
181          //gen.emitCompare(Bytecode.IFEQ, false_label());
182          //gen.emitGoto(true_label());
183        }
184      }
185      /**
186       * @ast method 
187       * @aspect MethodSignature15
188       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/MethodSignature.jrag:91
189       */
190      protected SimpleSet chooseConstructor(Collection constructors, List argList) {
191        SimpleSet potentiallyApplicable = SimpleSet.emptySet;
192        // select potentially applicable constructors
193        for(Iterator iter = constructors.iterator(); iter.hasNext(); ) {
194          ConstructorDecl decl = (ConstructorDecl)iter.next();
195          if(decl.potentiallyApplicable(argList) && decl.accessibleFrom(hostType()))
196            potentiallyApplicable = potentiallyApplicable.add(decl);
197        }
198        // first phase
199        SimpleSet maxSpecific = SimpleSet.emptySet;
200        for(Iterator iter = potentiallyApplicable.iterator(); iter.hasNext(); ) {
201          ConstructorDecl decl = (ConstructorDecl)iter.next();
202          if(decl.applicableBySubtyping(argList))
203            maxSpecific = mostSpecific(maxSpecific, decl);
204        }
205    
206        // second phase
207        if(maxSpecific.isEmpty()) {
208          for(Iterator iter = potentiallyApplicable.iterator(); iter.hasNext(); ) {
209            ConstructorDecl decl = (ConstructorDecl)iter.next();
210            if(decl.applicableByMethodInvocationConversion(argList))
211              maxSpecific = mostSpecific(maxSpecific, decl);
212          }
213        }
214    
215        // third phase
216        if(maxSpecific.isEmpty()) {
217          for(Iterator iter = potentiallyApplicable.iterator(); iter.hasNext(); ) {
218            ConstructorDecl decl = (ConstructorDecl)iter.next();
219            if(decl.isVariableArity() && decl.applicableVariableArity(argList))
220              maxSpecific = mostSpecific(maxSpecific, decl);
221          }
222        }
223        return maxSpecific;
224      }
225      /**
226       * @ast method 
227       * @aspect MethodSignature15
228       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/MethodSignature.jrag:128
229       */
230      protected static SimpleSet mostSpecific(SimpleSet maxSpecific, ConstructorDecl decl) {
231        if(maxSpecific.isEmpty())
232          maxSpecific = maxSpecific.add(decl);
233        else {
234          if(decl.moreSpecificThan((ConstructorDecl)maxSpecific.iterator().next()))
235            maxSpecific = SimpleSet.emptySet.add(decl);
236          else if(!((ConstructorDecl)maxSpecific.iterator().next()).moreSpecificThan(decl))
237            maxSpecific = maxSpecific.add(decl);
238        }
239        return maxSpecific;
240      }
241      /**
242       * @ast method 
243       * 
244       */
245      public Expr() {
246        super();
247    
248    
249      }
250      /**
251       * Initializes the child array to the correct size.
252       * Initializes List and Opt nta children.
253       * @apilevel internal
254       * @ast method
255       * @ast method 
256       * 
257       */
258      public void init$Children() {
259      }
260      /**
261       * @apilevel low-level
262       * @ast method 
263       * 
264       */
265      protected int numChildren() {
266        return 0;
267      }
268      /**
269       * @apilevel internal
270       * @ast method 
271       * 
272       */
273      public boolean mayHaveRewrite() {
274        return false;
275      }
276      /**
277       * @ast method 
278       * @aspect AutoBoxingCodegen
279       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AutoBoxingCodegen.jrag:111
280       */
281        public void emitEvalBranch(CodeGeneration gen) {
282        if(type().isReferenceType()) {
283          createBCode(gen);
284          type().emitUnboxingOperation(gen);
285          gen.emitCompare(Bytecode.IFEQ, false_label());
286          gen.emitGoto(true_label());
287        }
288        else {
289          refined_CreateBCode_Expr_emitEvalBranch(gen);
290        }
291      }
292      /**
293       * @attribute syn
294       * @aspect TypeAnalysis
295       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:276
296       */
297      @SuppressWarnings({"unchecked", "cast"})
298      public abstract TypeDecl type();
299      /**
300       * @attribute syn
301       * @aspect ConstantExpression
302       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:91
303       */
304      public Constant constant() {
305        ASTNode$State state = state();
306        try {
307        throw new UnsupportedOperationException("ConstantExpression operation constant" +
308          " not supported for type " + getClass().getName()); 
309      }
310        finally {
311        }
312      }
313      /*syn lazy boolean FloatingPointLiteral.isZero() {
314        String s = getLITERAL();
315        for(int i = 0; i < s.length(); i++) {
316          char c = s.charAt(i);
317          if(c == 'E'  || c == 'e')
318            break;
319          if(Character.isDigit(c) && c != '0') {
320            return false;
321          }
322        }
323        return true;
324      }
325      syn lazy boolean DoubleLiteral.isZero() {
326        String s = getLITERAL();
327        for(int i = 0; i < s.length(); i++) {
328          char c = s.charAt(i);
329          if(c == 'E'  || c == 'e')
330            break;
331          if(Character.isDigit(c) && c != '0') {
332            return false;
333          }
334        }
335        return true;
336      }* @attribute syn
337       * @aspect ConstantExpression
338       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:152
339       */
340      public boolean isPositive() {
341        ASTNode$State state = state();
342        try {  return false;  }
343        finally {
344        }
345      }
346      /* 
347       * representableIn(T) is true if and only if the the expression is a 
348       * compile-time constant of type byte, char, short or int, and the value  
349       * of the expression can be represented (by an expression) in the type T
350       * where T must be byte, char or short.
351       * @attribute syn
352       * @aspect ConstantExpression
353       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:308
354       */
355      public boolean representableIn(TypeDecl t) {
356        ASTNode$State state = state();
357        try {  
358       if (!type().isByte() && !type().isChar() && !type().isShort() && !type().isInt()) {
359               return false;
360       }
361       if (t.isByte())
362               return constant().intValue() >= Byte.MIN_VALUE && constant().intValue() <= Byte.MAX_VALUE;
363       if (t.isChar())
364               return constant().intValue() >= Character.MIN_VALUE && constant().intValue() <= Character.MAX_VALUE;
365       if (t.isShort())
366               return constant().intValue() >= Short.MIN_VALUE && constant().intValue() <= Short.MAX_VALUE;
367        if(t.isInt()) 
368          return constant().intValue() >= Integer.MIN_VALUE && constant().intValue() <= Integer.MAX_VALUE;
369         return false;
370      }
371        finally {
372        }
373      }
374      /**
375       * @attribute syn
376       * @aspect ConstantExpression
377       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:336
378       */
379      public boolean isConstant() {
380        ASTNode$State state = state();
381        try {  return false;  }
382        finally {
383        }
384      }
385      /**
386       * @attribute syn
387       * @aspect ConstantExpression
388       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:365
389       */
390      public boolean isTrue() {
391        ASTNode$State state = state();
392        try {  return isConstant() && type() instanceof BooleanType && constant().booleanValue();  }
393        finally {
394        }
395      }
396      /**
397       * @attribute syn
398       * @aspect ConstantExpression
399       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/ConstantExpression.jrag:366
400       */
401      public boolean isFalse() {
402        ASTNode$State state = state();
403        try {  return isConstant() && type() instanceof BooleanType && !constant().booleanValue();  }
404        finally {
405        }
406      }
407      /**
408       * @attribute syn
409       * @aspect DefiniteAssignment
410       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:58
411       */
412      public Variable varDecl() {
413        ASTNode$State state = state();
414        try {  return null;  }
415        finally {
416        }
417      }
418      /**
419       * @attribute syn
420       * @aspect DA
421       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:333
422       */
423      public boolean isDAafterFalse(Variable v) {
424        ASTNode$State state = state();
425        try {  return isTrue() || isDAbefore(v);  }
426        finally {
427        }
428      }
429      /*eq Stmt.isDAafter(Variable v) {
430        //System.out.println("### isDAafter reached in " + getClass().getName());
431        //throw new NullPointerException();
432        throw new Error("Can not compute isDAafter for " + getClass().getName() + " at " + errorPrefix());
433      }* @attribute syn
434       * @aspect DA
435       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:332
436       */
437      public boolean isDAafterTrue(Variable v) {
438        ASTNode$State state = state();
439        try {  return isFalse() || isDAbefore(v);  }
440        finally {
441        }
442      }
443      /**
444       * @attribute syn
445       * @aspect DA
446       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:235
447       */
448      public boolean isDAafter(Variable v) {
449        ASTNode$State state = state();
450        try {  return (isDAafterFalse(v) && isDAafterTrue(v)) || isDAbefore(v);  }
451        finally {
452        }
453      }
454      /**
455       * @attribute syn
456       * @aspect DU
457       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:703
458       */
459      public boolean isDUafterFalse(Variable v) {
460        ASTNode$State state = state();
461        try {
462        if(isTrue())
463          return true;
464        return isDUbefore(v);
465      }
466        finally {
467        }
468      }
469      /**
470       * @attribute syn
471       * @aspect DU
472       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:702
473       */
474      public boolean isDUafterTrue(Variable v) {
475        ASTNode$State state = state();
476        try {
477        if(isFalse())
478          return true;
479        return isDUbefore(v);
480      }
481        finally {
482        }
483      }
484      /**
485       * @attribute syn
486       * @aspect DU
487       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:694
488       */
489      public boolean isDUafter(Variable v) {
490        ASTNode$State state = state();
491        try {  return (isDUafterFalse(v) && isDUafterTrue(v)) || isDUbefore(v);  }
492        finally {
493        }
494      }
495      /**
496       * @attribute syn
497       * @aspect ConstructScope
498       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:32
499       */
500      public SimpleSet mostSpecificConstructor(Collection constructors) {
501        ASTNode$State state = state();
502        try {
503        SimpleSet maxSpecific = SimpleSet.emptySet;
504        for(Iterator iter = constructors.iterator(); iter.hasNext(); ) {
505          ConstructorDecl decl = (ConstructorDecl)iter.next();
506          if(applicableAndAccessible(decl)) {
507            if(maxSpecific.isEmpty())
508              maxSpecific = maxSpecific.add(decl);
509            else {
510              if(decl.moreSpecificThan((ConstructorDecl)maxSpecific.iterator().next()))
511                maxSpecific = SimpleSet.emptySet.add(decl);
512              else if(!((ConstructorDecl)maxSpecific.iterator().next()).moreSpecificThan(decl))
513                maxSpecific = maxSpecific.add(decl);
514            }
515          }
516        }
517        return maxSpecific;
518      }
519        finally {
520        }
521      }
522      /**
523       * @attribute syn
524       * @aspect ConstructScope
525       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupConstructor.jrag:50
526       */
527      public boolean applicableAndAccessible(ConstructorDecl decl) {
528        ASTNode$State state = state();
529        try {  return false;  }
530        finally {
531        }
532      }
533      /**
534       * @attribute syn
535       * @aspect LookupFullyQualifiedTypes
536       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:83
537       */
538      public boolean hasQualifiedPackage(String packageName) {
539        ASTNode$State state = state();
540        try {  return false;  }
541        finally {
542        }
543      }
544      /**
545       * @attribute syn
546       * @aspect TypeScopePropagation
547       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:430
548       */
549      public SimpleSet qualifiedLookupType(String name) {
550        ASTNode$State state = state();
551        try {  return keepAccessibleTypes(type().memberTypes(name));  }
552        finally {
553        }
554      }
555      /**
556       * @attribute syn
557       * @aspect VariableScope
558       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:148
559       */
560      public SimpleSet qualifiedLookupVariable(String name) {
561        ASTNode$State state = state();
562        try {
563        if(type().accessibleFrom(hostType()))
564          return keepAccessibleFields(type().memberFields(name));
565        return SimpleSet.emptySet;
566      }
567        finally {
568        }
569      }
570      /**
571       * @attribute syn
572       * @aspect Names
573       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:25
574       */
575      public String packageName() {
576        ASTNode$State state = state();
577        try {  return "";  }
578        finally {
579        }
580      }
581      /**
582       * @attribute syn
583       * @aspect Names
584       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/QualifiedNames.jrag:62
585       */
586      public String typeName() {
587        ASTNode$State state = state();
588        try {  return "";  }
589        finally {
590        }
591      }
592      /**
593       * @attribute syn
594       * @aspect AccessTypes
595       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:13
596       */
597      public boolean isTypeAccess() {
598        ASTNode$State state = state();
599        try {  return false;  }
600        finally {
601        }
602      }
603      /**
604       * @attribute syn
605       * @aspect AccessTypes
606       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:17
607       */
608      public boolean isMethodAccess() {
609        ASTNode$State state = state();
610        try {  return false;  }
611        finally {
612        }
613      }
614      /**
615       * @attribute syn
616       * @aspect AccessTypes
617       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:21
618       */
619      public boolean isFieldAccess() {
620        ASTNode$State state = state();
621        try {  return false;  }
622        finally {
623        }
624      }
625      /**
626       * @attribute syn
627       * @aspect AccessTypes
628       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:25
629       */
630      public boolean isSuperAccess() {
631        ASTNode$State state = state();
632        try {  return false;  }
633        finally {
634        }
635      }
636      /**
637       * @attribute syn
638       * @aspect AccessTypes
639       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:31
640       */
641      public boolean isThisAccess() {
642        ASTNode$State state = state();
643        try {  return false;  }
644        finally {
645        }
646      }
647      /**
648       * @attribute syn
649       * @aspect AccessTypes
650       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:37
651       */
652      public boolean isPackageAccess() {
653        ASTNode$State state = state();
654        try {  return false;  }
655        finally {
656        }
657      }
658      /**
659       * @attribute syn
660       * @aspect AccessTypes
661       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:41
662       */
663      public boolean isArrayAccess() {
664        ASTNode$State state = state();
665        try {  return false;  }
666        finally {
667        }
668      }
669      /**
670       * @attribute syn
671       * @aspect AccessTypes
672       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:45
673       */
674      public boolean isClassAccess() {
675        ASTNode$State state = state();
676        try {  return false;  }
677        finally {
678        }
679      }
680      /**
681       * @attribute syn
682       * @aspect AccessTypes
683       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:49
684       */
685      public boolean isSuperConstructorAccess() {
686        ASTNode$State state = state();
687        try {  return false;  }
688        finally {
689        }
690      }
691      /**
692       * @attribute syn
693       * @aspect QualifiedNames
694       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:55
695       */
696      public boolean isLeftChildOfDot() {
697        ASTNode$State state = state();
698        try {  return hasParentDot() && parentDot().getLeft() == this;  }
699        finally {
700        }
701      }
702      /**
703       * @attribute syn
704       * @aspect QualifiedNames
705       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:56
706       */
707      public boolean isRightChildOfDot() {
708        ASTNode$State state = state();
709        try {  return hasParentDot() && parentDot().getRight() == this;  }
710        finally {
711        }
712      }
713      /**
714       * @attribute syn
715       * @aspect QualifiedNames
716       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:69
717       */
718      public AbstractDot parentDot() {
719        ASTNode$State state = state();
720        try {  return getParent() instanceof AbstractDot ? (AbstractDot)getParent() : null;  }
721        finally {
722        }
723      }
724      /**
725       * @attribute syn
726       * @aspect QualifiedNames
727       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:70
728       */
729      public boolean hasParentDot() {
730        ASTNode$State state = state();
731        try {  return parentDot() != null;  }
732        finally {
733        }
734      }
735      /**
736       * @attribute syn
737       * @aspect QualifiedNames
738       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:72
739       */
740      public Access nextAccess() {
741        ASTNode$State state = state();
742        try {  return parentDot().nextAccess();  }
743        finally {
744        }
745      }
746      /**
747       * @attribute syn
748       * @aspect QualifiedNames
749       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ResolveAmbiguousNames.jrag:73
750       */
751      public boolean hasNextAccess() {
752        ASTNode$State state = state();
753        try {  return isLeftChildOfDot();  }
754        finally {
755        }
756      }
757      /**
758       * @attribute syn
759       * @aspect NestedTypes
760       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:503
761       */
762      public Stmt enclosingStmt() {
763        ASTNode$State state = state();
764        try {
765        ASTNode node = this;
766        while(node != null && !(node instanceof Stmt))
767          node = node.getParent();
768        return (Stmt)node;
769      }
770        finally {
771        }
772      }
773      /**
774       * @attribute syn
775       * @aspect TypeCheck
776       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:15
777       */
778      public boolean isVariable() {
779        ASTNode$State state = state();
780        try {  return false;  }
781        finally {
782        }
783      }
784      /**
785       * @attribute syn
786       * @aspect TypeHierarchyCheck
787       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:20
788       */
789      public boolean isUnknown() {
790        ASTNode$State state = state();
791        try {  return type().isUnknown();  }
792        finally {
793        }
794      }
795      /**
796       * @attribute syn
797       * @aspect TypeHierarchyCheck
798       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:150
799       */
800      public boolean staticContextQualifier() {
801        ASTNode$State state = state();
802        try {  return false;  }
803        finally {
804        }
805      }
806      /**
807       * @attribute syn
808       * @aspect CreateBCode
809       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:219
810       */
811      public boolean needsPop() {
812        ASTNode$State state = state();
813        try {  return true;  }
814        finally {
815        }
816      }
817      /**
818       * @attribute syn
819       * @aspect CreateBCode
820       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:231
821       */
822      public boolean isVarAccessWithAccessor() {
823        ASTNode$State state = state();
824        try {  return false;  }
825        finally {
826        }
827      }
828      /**
829       * @apilevel internal
830       */
831      protected boolean false_label_computed = false;
832      /**
833       * @apilevel internal
834       */
835      protected int false_label_value;
836      /**
837       * @attribute syn
838       * @aspect CreateBCode
839       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:941
840       */
841      @SuppressWarnings({"unchecked", "cast"})
842      public int false_label() {
843        if(false_label_computed) {
844          return false_label_value;
845        }
846          ASTNode$State state = state();
847      int num = state.boundariesCrossed;
848      boolean isFinal = this.is$Final();
849        false_label_value = false_label_compute();
850      if(isFinal && num == state().boundariesCrossed){ false_label_computed = true; }
851            return false_label_value;
852      }
853      /**
854       * @apilevel internal
855       */
856      private int false_label_compute() {  return getParent().definesLabel() ? condition_false_label() : hostType().constantPool().newLabel();  }
857      /**
858       * @apilevel internal
859       */
860      protected boolean true_label_computed = false;
861      /**
862       * @apilevel internal
863       */
864      protected int true_label_value;
865      /**
866       * @attribute syn
867       * @aspect CreateBCode
868       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:943
869       */
870      @SuppressWarnings({"unchecked", "cast"})
871      public int true_label() {
872        if(true_label_computed) {
873          return true_label_value;
874        }
875          ASTNode$State state = state();
876      int num = state.boundariesCrossed;
877      boolean isFinal = this.is$Final();
878        true_label_value = true_label_compute();
879      if(isFinal && num == state().boundariesCrossed){ true_label_computed = true; }
880            return true_label_value;
881      }
882      /**
883       * @apilevel internal
884       */
885      private int true_label_compute() {  return getParent().definesLabel() ? condition_true_label() : hostType().constantPool().newLabel();  }
886      /**
887       * @attribute syn
888       * @aspect CreateBCode
889       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1007
890       */
891      public boolean canBeTrue() {
892        ASTNode$State state = state();
893        try {  return !isFalse();  }
894        finally {
895        }
896      }
897      /**
898       * @attribute syn
899       * @aspect CreateBCode
900       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1017
901       */
902      public boolean canBeFalse() {
903        ASTNode$State state = state();
904        try {  return !isTrue();  }
905        finally {
906        }
907      }
908      /**
909       * @attribute syn
910       * @aspect Enums
911       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Enums.jrag:500
912       */
913      public boolean isEnumConstant() {
914        ASTNode$State state = state();
915        try {  return false;  }
916        finally {
917        }
918      }
919      /**
920       * @attribute syn
921       * @aspect PreciseRethrow
922       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:11
923       */
924      public Collection<TypeDecl> throwTypes() {
925        ASTNode$State state = state();
926        try {
927               Collection<TypeDecl> tts = new LinkedList<TypeDecl>();
928               tts.add(type());
929               return tts;
930       }
931        finally {
932        }
933      }
934      /**
935       * @attribute syn
936       * @aspect PreciseRethrow
937       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:111
938       */
939      public boolean modifiedInScope(Variable var) {
940        ASTNode$State state = state();
941        try {  return false;  }
942        finally {
943        }
944      }
945      /**
946       * @attribute syn
947       * @aspect PreciseRethrow
948       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:115
949       */
950      public boolean isVariable(Variable var) {
951        ASTNode$State state = state();
952        try {  return false;  }
953        finally {
954        }
955      }
956      /**
957       * @attribute inh
958       * @aspect DefiniteAssignment
959       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:15
960       */
961      @SuppressWarnings({"unchecked", "cast"})
962      public boolean isDest() {
963          ASTNode$State state = state();
964        boolean isDest_value = getParent().Define_boolean_isDest(this, null);
965            return isDest_value;
966      }
967      /**
968       * @attribute inh
969       * @aspect DefiniteAssignment
970       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:25
971       */
972      @SuppressWarnings({"unchecked", "cast"})
973      public boolean isSource() {
974          ASTNode$State state = state();
975        boolean isSource_value = getParent().Define_boolean_isSource(this, null);
976            return isSource_value;
977      }
978      /**
979       * @attribute inh
980       * @aspect DefiniteAssignment
981       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:49
982       */
983      @SuppressWarnings({"unchecked", "cast"})
984      public boolean isIncOrDec() {
985          ASTNode$State state = state();
986        boolean isIncOrDec_value = getParent().Define_boolean_isIncOrDec(this, null);
987            return isIncOrDec_value;
988      }
989      /**
990       * @attribute inh
991       * @aspect DA
992       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:234
993       */
994      @SuppressWarnings({"unchecked", "cast"})
995      public boolean isDAbefore(Variable v) {
996          ASTNode$State state = state();
997        boolean isDAbefore_Variable_value = getParent().Define_boolean_isDAbefore(this, null, v);
998            return isDAbefore_Variable_value;
999      }
1000      /**
1001       * @attribute inh
1002       * @aspect DU
1003       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:693
1004       */
1005      @SuppressWarnings({"unchecked", "cast"})
1006      public boolean isDUbefore(Variable v) {
1007          ASTNode$State state = state();
1008        boolean isDUbefore_Variable_value = getParent().Define_boolean_isDUbefore(this, null, v);
1009            return isDUbefore_Variable_value;
1010      }
1011      /**
1012       * @attribute inh
1013       * @aspect LookupMethod
1014       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:23
1015       */
1016      @SuppressWarnings({"unchecked", "cast"})
1017      public Collection lookupMethod(String name) {
1018          ASTNode$State state = state();
1019        Collection lookupMethod_String_value = getParent().Define_Collection_lookupMethod(this, null, name);
1020            return lookupMethod_String_value;
1021      }
1022      /**
1023       * @attribute inh
1024       * @aspect SpecialClasses
1025       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:49
1026       */
1027      @SuppressWarnings({"unchecked", "cast"})
1028      public TypeDecl typeBoolean() {
1029          ASTNode$State state = state();
1030        TypeDecl typeBoolean_value = getParent().Define_TypeDecl_typeBoolean(this, null);
1031            return typeBoolean_value;
1032      }
1033      /**
1034       * @attribute inh
1035       * @aspect SpecialClasses
1036       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:50
1037       */
1038      @SuppressWarnings({"unchecked", "cast"})
1039      public TypeDecl typeByte() {
1040          ASTNode$State state = state();
1041        TypeDecl typeByte_value = getParent().Define_TypeDecl_typeByte(this, null);
1042            return typeByte_value;
1043      }
1044      /**
1045       * @attribute inh
1046       * @aspect SpecialClasses
1047       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:51
1048       */
1049      @SuppressWarnings({"unchecked", "cast"})
1050      public TypeDecl typeShort() {
1051          ASTNode$State state = state();
1052        TypeDecl typeShort_value = getParent().Define_TypeDecl_typeShort(this, null);
1053            return typeShort_value;
1054      }
1055      /**
1056       * @attribute inh
1057       * @aspect SpecialClasses
1058       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:52
1059       */
1060      @SuppressWarnings({"unchecked", "cast"})
1061      public TypeDecl typeChar() {
1062          ASTNode$State state = state();
1063        TypeDecl typeChar_value = getParent().Define_TypeDecl_typeChar(this, null);
1064            return typeChar_value;
1065      }
1066      /**
1067       * @attribute inh
1068       * @aspect SpecialClasses
1069       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:53
1070       */
1071      @SuppressWarnings({"unchecked", "cast"})
1072      public TypeDecl typeInt() {
1073          ASTNode$State state = state();
1074        TypeDecl typeInt_value = getParent().Define_TypeDecl_typeInt(this, null);
1075            return typeInt_value;
1076      }
1077      /**
1078       * @attribute inh
1079       * @aspect SpecialClasses
1080       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:54
1081       */
1082      @SuppressWarnings({"unchecked", "cast"})
1083      public TypeDecl typeLong() {
1084          ASTNode$State state = state();
1085        TypeDecl typeLong_value = getParent().Define_TypeDecl_typeLong(this, null);
1086            return typeLong_value;
1087      }
1088      /**
1089       * @attribute inh
1090       * @aspect SpecialClasses
1091       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:55
1092       */
1093      @SuppressWarnings({"unchecked", "cast"})
1094      public TypeDecl typeFloat() {
1095          ASTNode$State state = state();
1096        TypeDecl typeFloat_value = getParent().Define_TypeDecl_typeFloat(this, null);
1097            return typeFloat_value;
1098      }
1099      /**
1100       * @attribute inh
1101       * @aspect SpecialClasses
1102       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:56
1103       */
1104      @SuppressWarnings({"unchecked", "cast"})
1105      public TypeDecl typeDouble() {
1106          ASTNode$State state = state();
1107        TypeDecl typeDouble_value = getParent().Define_TypeDecl_typeDouble(this, null);
1108            return typeDouble_value;
1109      }
1110      /**
1111       * @attribute inh
1112       * @aspect SpecialClasses
1113       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:57
1114       */
1115      @SuppressWarnings({"unchecked", "cast"})
1116      public TypeDecl typeString() {
1117          ASTNode$State state = state();
1118        TypeDecl typeString_value = getParent().Define_TypeDecl_typeString(this, null);
1119            return typeString_value;
1120      }
1121      /**
1122       * @attribute inh
1123       * @aspect SpecialClasses
1124       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:58
1125       */
1126      @SuppressWarnings({"unchecked", "cast"})
1127      public TypeDecl typeVoid() {
1128          ASTNode$State state = state();
1129        TypeDecl typeVoid_value = getParent().Define_TypeDecl_typeVoid(this, null);
1130            return typeVoid_value;
1131      }
1132      /**
1133       * @attribute inh
1134       * @aspect SpecialClasses
1135       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:59
1136       */
1137      @SuppressWarnings({"unchecked", "cast"})
1138      public TypeDecl typeNull() {
1139          ASTNode$State state = state();
1140        TypeDecl typeNull_value = getParent().Define_TypeDecl_typeNull(this, null);
1141            return typeNull_value;
1142      }
1143      /**
1144       * @attribute inh
1145       * @aspect SpecialClasses
1146       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:72
1147       */
1148      @SuppressWarnings({"unchecked", "cast"})
1149      public TypeDecl unknownType() {
1150          ASTNode$State state = state();
1151        TypeDecl unknownType_value = getParent().Define_TypeDecl_unknownType(this, null);
1152            return unknownType_value;
1153      }
1154      /**
1155       * @attribute inh
1156       * @aspect LookupFullyQualifiedTypes
1157       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:86
1158       */
1159      @SuppressWarnings({"unchecked", "cast"})
1160      public boolean hasPackage(String packageName) {
1161          ASTNode$State state = state();
1162        boolean hasPackage_String_value = getParent().Define_boolean_hasPackage(this, null, packageName);
1163            return hasPackage_String_value;
1164      }
1165      /**
1166       * @attribute inh
1167       * @aspect LookupFullyQualifiedTypes
1168       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:95
1169       */
1170      @SuppressWarnings({"unchecked", "cast"})
1171      public TypeDecl lookupType(String packageName, String typeName) {
1172          ASTNode$State state = state();
1173        TypeDecl lookupType_String_String_value = getParent().Define_TypeDecl_lookupType(this, null, packageName, typeName);
1174            return lookupType_String_String_value;
1175      }
1176      /**
1177       * @attribute inh
1178       * @aspect TypeScopePropagation
1179       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:264
1180       */
1181      @SuppressWarnings({"unchecked", "cast"})
1182      public SimpleSet lookupType(String name) {
1183          ASTNode$State state = state();
1184        SimpleSet lookupType_String_value = getParent().Define_SimpleSet_lookupType(this, null, name);
1185            return lookupType_String_value;
1186      }
1187      /**
1188       * @attribute inh
1189       * @aspect VariableScope
1190       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:19
1191       */
1192      @SuppressWarnings({"unchecked", "cast"})
1193      public SimpleSet lookupVariable(String name) {
1194          ASTNode$State state = state();
1195        SimpleSet lookupVariable_String_value = getParent().Define_SimpleSet_lookupVariable(this, null, name);
1196            return lookupVariable_String_value;
1197      }
1198      /**
1199       * @attribute inh
1200       * @aspect SyntacticClassification
1201       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:20
1202       */
1203      @SuppressWarnings({"unchecked", "cast"})
1204      public NameType nameType() {
1205          ASTNode$State state = state();
1206        NameType nameType_value = getParent().Define_NameType_nameType(this, null);
1207            return nameType_value;
1208      }
1209      /**
1210       * @attribute inh
1211       * @aspect NestedTypes
1212       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:510
1213       */
1214      @SuppressWarnings({"unchecked", "cast"})
1215      public BodyDecl enclosingBodyDecl() {
1216          ASTNode$State state = state();
1217        BodyDecl enclosingBodyDecl_value = getParent().Define_BodyDecl_enclosingBodyDecl(this, null);
1218            return enclosingBodyDecl_value;
1219      }
1220      /**
1221       * @attribute inh
1222       * @aspect NestedTypes
1223       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:567
1224       */
1225      @SuppressWarnings({"unchecked", "cast"})
1226      public String hostPackage() {
1227          ASTNode$State state = state();
1228        String hostPackage_value = getParent().Define_String_hostPackage(this, null);
1229            return hostPackage_value;
1230      }
1231      /**
1232       * @attribute inh
1233       * @aspect NestedTypes
1234       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:586
1235       */
1236      @SuppressWarnings({"unchecked", "cast"})
1237      public TypeDecl hostType() {
1238          ASTNode$State state = state();
1239        TypeDecl hostType_value = getParent().Define_TypeDecl_hostType(this, null);
1240            return hostType_value;
1241      }
1242      /**
1243       * @attribute inh
1244       * @aspect TypeHierarchyCheck
1245       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:11
1246       */
1247      @SuppressWarnings({"unchecked", "cast"})
1248      public String methodHost() {
1249          ASTNode$State state = state();
1250        String methodHost_value = getParent().Define_String_methodHost(this, null);
1251            return methodHost_value;
1252      }
1253      /**
1254       * @attribute inh
1255       * @aspect TypeHierarchyCheck
1256       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:134
1257       */
1258      @SuppressWarnings({"unchecked", "cast"})
1259      public boolean inStaticContext() {
1260          ASTNode$State state = state();
1261        boolean inStaticContext_value = getParent().Define_boolean_inStaticContext(this, null);
1262            return inStaticContext_value;
1263      }
1264      /**
1265       * @attribute inh
1266       * @aspect CreateBCode
1267       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:973
1268       */
1269      @SuppressWarnings({"unchecked", "cast"})
1270      public int condition_false_label() {
1271          ASTNode$State state = state();
1272        int condition_false_label_value = getParent().Define_int_condition_false_label(this, null);
1273            return condition_false_label_value;
1274      }
1275      /**
1276       * @attribute inh
1277       * @aspect CreateBCode
1278       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:977
1279       */
1280      @SuppressWarnings({"unchecked", "cast"})
1281      public int condition_true_label() {
1282          ASTNode$State state = state();
1283        int condition_true_label_value = getParent().Define_int_condition_true_label(this, null);
1284            return condition_true_label_value;
1285      }
1286      /**
1287       * @attribute inh
1288       * @aspect GenericMethodsInference
1289       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericMethodsInference.jrag:33
1290       */
1291      @SuppressWarnings({"unchecked", "cast"})
1292      public TypeDecl assignConvertedType() {
1293          ASTNode$State state = state();
1294        TypeDecl assignConvertedType_value = getParent().Define_TypeDecl_assignConvertedType(this, null);
1295            return assignConvertedType_value;
1296      }
1297      /**
1298       * @attribute inh
1299       * @aspect GenericsTypeAnalysis
1300       * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:271
1301       */
1302      @SuppressWarnings({"unchecked", "cast"})
1303      public boolean inExtendsOrImplements() {
1304          ASTNode$State state = state();
1305        boolean inExtendsOrImplements_value = getParent().Define_boolean_inExtendsOrImplements(this, null);
1306            return inExtendsOrImplements_value;
1307      }
1308      /**
1309       * @apilevel internal
1310       */
1311      public ASTNode rewriteTo() {
1312        return super.rewriteTo();
1313      }
1314    }