001    /* This file was generated with JastAdd2 (http://jastadd.org) version 2.1.13-12-g880e696 */
002    package org.extendj.ast;
003    
004    import java.util.HashSet;
005    import java.io.File;
006    import java.util.Set;
007    import java.util.Collections;
008    import java.util.Collection;
009    import java.util.ArrayList;
010    import beaver.*;
011    import java.util.*;
012    import java.io.ByteArrayOutputStream;
013    import java.io.PrintStream;
014    import java.lang.reflect.InvocationTargetException;
015    import java.lang.reflect.Method;
016    import org.jastadd.util.*;
017    import java.util.zip.*;
018    import java.io.*;
019    import org.jastadd.util.PrettyPrintable;
020    import org.jastadd.util.PrettyPrinter;
021    import java.io.FileNotFoundException;
022    import java.io.BufferedInputStream;
023    import java.io.DataInputStream;
024    /**
025     * @ast node
026     * @declaredat /home/jesper/git/extendj/java5/grammar/Generics.ast:13
027     * @production BodyDeclList : {@link List};
028    
029     */
030    public class BodyDeclList extends List implements Cloneable {
031      /**
032       * @declaredat ASTNode:1
033       */
034      public BodyDeclList() {
035        super();
036      }
037      /**
038       * Initializes the child array to the correct size.
039       * Initializes List and Opt nta children.
040       * @apilevel internal
041       * @ast method
042       * @declaredat ASTNode:10
043       */
044      public void init$Children() {
045      }
046      /**
047       * @apilevel low-level
048       * @declaredat ASTNode:15
049       */
050      protected int numChildren() {
051        return 0;
052      }
053      /**
054       * @apilevel internal
055       * @declaredat ASTNode:21
056       */
057      public boolean mayHaveRewrite() {
058        return false;
059      }
060      /**
061       * @apilevel internal
062       * @declaredat ASTNode:27
063       */
064      public void flushAttrCache() {
065        super.flushAttrCache();
066        localMethodSignatureCopy_MethodDecl_MemberSubstitutor_reset();
067        localFieldCopy_FieldDeclaration_MemberSubstitutor_reset();
068        localClassDeclCopy_ClassDecl_MemberSubstitutor_reset();
069        localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_reset();
070        constructorCopy_ConstructorDecl_MemberSubstitutor_reset();
071      }
072      /**
073       * @apilevel internal
074       * @declaredat ASTNode:38
075       */
076      public void flushCollectionCache() {
077        super.flushCollectionCache();
078      }
079      /**
080       * @apilevel internal
081       * @declaredat ASTNode:44
082       */
083      public void flushRewriteCache() {
084        super.flushRewriteCache();
085      }
086      /**
087       * @apilevel internal
088       * @declaredat ASTNode:50
089       */
090      public BodyDeclList clone() throws CloneNotSupportedException {
091        BodyDeclList node = (BodyDeclList) super.clone();
092        return node;
093      }
094      /**
095       * @apilevel internal
096       * @declaredat ASTNode:57
097       */
098      public BodyDeclList copy() {
099        try {
100          BodyDeclList node = (BodyDeclList) clone();
101          node.parent = null;
102          if (children != null) {
103            node.children = (ASTNode[]) children.clone();
104          }
105          return node;
106        } catch (CloneNotSupportedException e) {
107          throw new Error("Error: clone not supported for " + getClass().getName());
108        }
109      }
110      /**
111       * Create a deep copy of the AST subtree at this node.
112       * The copy is dangling, i.e. has no parent.
113       * @return dangling copy of the subtree at this node
114       * @apilevel low-level
115       * @deprecated Please use treeCopy or treeCopyNoTransform instead
116       * @declaredat ASTNode:76
117       */
118      @Deprecated
119      public BodyDeclList fullCopy() {
120        return treeCopyNoTransform();
121      }
122      /**
123       * Create a deep copy of the AST subtree at this node.
124       * The copy is dangling, i.e. has no parent.
125       * @return dangling copy of the subtree at this node
126       * @apilevel low-level
127       * @declaredat ASTNode:86
128       */
129      public BodyDeclList treeCopyNoTransform() {
130        BodyDeclList tree = (BodyDeclList) copy();
131        if (children != null) {
132          for (int i = 0; i < children.length; ++i) {
133            ASTNode child = (ASTNode) children[i];
134            if (child != null) {
135              child = child.treeCopyNoTransform();
136              tree.setChild(child, i);
137            }
138          }
139        }
140        return tree;
141      }
142      /**
143       * Create a deep copy of the AST subtree at this node.
144       * The subtree of this node is traversed to trigger rewrites before copy.
145       * The copy is dangling, i.e. has no parent.
146       * @return dangling copy of the subtree at this node
147       * @apilevel low-level
148       * @declaredat ASTNode:106
149       */
150      public BodyDeclList treeCopy() {
151        doFullTraversal();
152        return treeCopyNoTransform();
153      }
154      /**
155       * @apilevel internal
156       * @declaredat ASTNode:113
157       */
158      protected boolean is$Equal(ASTNode node) {
159        return super.is$Equal(node);    
160      }
161      /**
162       * @apilevel internal
163       */
164      protected List localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list;
165      /**
166       * @apilevel internal
167       */
168      protected java.util.Map localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values;
169      /**
170       * @apilevel internal
171       */
172      private void localMethodSignatureCopy_MethodDecl_MemberSubstitutor_reset() {
173        localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values = null;
174        localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list = null;
175      }
176      /**
177       * @attribute syn
178       * @aspect LookupParTypeDecl
179       * @declaredat /home/jesper/git/extendj/java5/frontend/Generics.jrag:1293
180       */
181      @ASTNodeAnnotation.Attribute
182      public BodyDecl localMethodSignatureCopy(MethodDecl originalMethod, MemberSubstitutor m) {
183        java.util.List _parameters = new java.util.ArrayList(2);
184        _parameters.add(originalMethod);
185        _parameters.add(m);
186        if (localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values == null) localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values = new org.jastadd.util.RobustMap(new java.util.HashMap());
187        ASTNode$State state = state();
188        if (localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values.containsKey(_parameters)) {
189          return (BodyDecl) localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values.get(_parameters);
190        }
191        boolean intermediate = state.INTERMEDIATE_VALUE;
192        state.INTERMEDIATE_VALUE = false;
193        int num = state.boundariesCrossed;
194        boolean isFinal = this.is$Final();
195        BodyDecl localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value = originalMethod.substitutedBodyDecl(m);
196        if (localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list == null) {
197          localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list = new List();
198          localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list.is$Final = true;
199          localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list.setParent(this);
200        }
201        localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list.add(localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value);
202        if (localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value != null) {
203          localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value = (BodyDecl) localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list.getChild(localMethodSignatureCopy_MethodDecl_MemberSubstitutor_list.numChildren-1);
204          localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value.is$Final = true;
205        }
206        if (true) {
207          localMethodSignatureCopy_MethodDecl_MemberSubstitutor_values.put(_parameters, localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value);
208        } else {
209        }
210        state.INTERMEDIATE_VALUE |= intermediate;
211    
212        return localMethodSignatureCopy_MethodDecl_MemberSubstitutor_value;
213      }
214      /**
215       * @apilevel internal
216       */
217      protected List localFieldCopy_FieldDeclaration_MemberSubstitutor_list;
218      /**
219       * @apilevel internal
220       */
221      protected java.util.Map localFieldCopy_FieldDeclaration_MemberSubstitutor_values;
222      /**
223       * @apilevel internal
224       */
225      private void localFieldCopy_FieldDeclaration_MemberSubstitutor_reset() {
226        localFieldCopy_FieldDeclaration_MemberSubstitutor_values = null;
227        localFieldCopy_FieldDeclaration_MemberSubstitutor_list = null;
228      }
229      /**
230       * @attribute syn
231       * @aspect LookupParTypeDecl
232       * @declaredat /home/jesper/git/extendj/java5/frontend/Generics.jrag:1311
233       */
234      @ASTNodeAnnotation.Attribute
235      public BodyDecl localFieldCopy(FieldDeclaration originalDecl, MemberSubstitutor m) {
236        java.util.List _parameters = new java.util.ArrayList(2);
237        _parameters.add(originalDecl);
238        _parameters.add(m);
239        if (localFieldCopy_FieldDeclaration_MemberSubstitutor_values == null) localFieldCopy_FieldDeclaration_MemberSubstitutor_values = new org.jastadd.util.RobustMap(new java.util.HashMap());
240        ASTNode$State state = state();
241        if (localFieldCopy_FieldDeclaration_MemberSubstitutor_values.containsKey(_parameters)) {
242          return (BodyDecl) localFieldCopy_FieldDeclaration_MemberSubstitutor_values.get(_parameters);
243        }
244        boolean intermediate = state.INTERMEDIATE_VALUE;
245        state.INTERMEDIATE_VALUE = false;
246        int num = state.boundariesCrossed;
247        boolean isFinal = this.is$Final();
248        BodyDecl localFieldCopy_FieldDeclaration_MemberSubstitutor_value = originalDecl.substitutedBodyDecl(m);
249        if (localFieldCopy_FieldDeclaration_MemberSubstitutor_list == null) {
250          localFieldCopy_FieldDeclaration_MemberSubstitutor_list = new List();
251          localFieldCopy_FieldDeclaration_MemberSubstitutor_list.is$Final = true;
252          localFieldCopy_FieldDeclaration_MemberSubstitutor_list.setParent(this);
253        }
254        localFieldCopy_FieldDeclaration_MemberSubstitutor_list.add(localFieldCopy_FieldDeclaration_MemberSubstitutor_value);
255        if (localFieldCopy_FieldDeclaration_MemberSubstitutor_value != null) {
256          localFieldCopy_FieldDeclaration_MemberSubstitutor_value = (BodyDecl) localFieldCopy_FieldDeclaration_MemberSubstitutor_list.getChild(localFieldCopy_FieldDeclaration_MemberSubstitutor_list.numChildren-1);
257          localFieldCopy_FieldDeclaration_MemberSubstitutor_value.is$Final = true;
258        }
259        if (true) {
260          localFieldCopy_FieldDeclaration_MemberSubstitutor_values.put(_parameters, localFieldCopy_FieldDeclaration_MemberSubstitutor_value);
261        } else {
262        }
263        state.INTERMEDIATE_VALUE |= intermediate;
264    
265        return localFieldCopy_FieldDeclaration_MemberSubstitutor_value;
266      }
267      /**
268       * @apilevel internal
269       */
270      protected List localClassDeclCopy_ClassDecl_MemberSubstitutor_list;
271      /**
272       * @apilevel internal
273       */
274      protected java.util.Map localClassDeclCopy_ClassDecl_MemberSubstitutor_values;
275      /**
276       * @apilevel internal
277       */
278      private void localClassDeclCopy_ClassDecl_MemberSubstitutor_reset() {
279        localClassDeclCopy_ClassDecl_MemberSubstitutor_values = null;
280        localClassDeclCopy_ClassDecl_MemberSubstitutor_list = null;
281      }
282      /**
283       * @attribute syn
284       * @aspect LookupParTypeDecl
285       * @declaredat /home/jesper/git/extendj/java5/frontend/Generics.jrag:1336
286       */
287      @ASTNodeAnnotation.Attribute
288      public MemberClassDecl localClassDeclCopy(ClassDecl originalDecl, MemberSubstitutor m) {
289        java.util.List _parameters = new java.util.ArrayList(2);
290        _parameters.add(originalDecl);
291        _parameters.add(m);
292        if (localClassDeclCopy_ClassDecl_MemberSubstitutor_values == null) localClassDeclCopy_ClassDecl_MemberSubstitutor_values = new org.jastadd.util.RobustMap(new java.util.HashMap());
293        ASTNode$State state = state();
294        if (localClassDeclCopy_ClassDecl_MemberSubstitutor_values.containsKey(_parameters)) {
295          return (MemberClassDecl) localClassDeclCopy_ClassDecl_MemberSubstitutor_values.get(_parameters);
296        }
297        boolean intermediate = state.INTERMEDIATE_VALUE;
298        state.INTERMEDIATE_VALUE = false;
299        int num = state.boundariesCrossed;
300        boolean isFinal = this.is$Final();
301        MemberClassDecl localClassDeclCopy_ClassDecl_MemberSubstitutor_value = localClassDeclCopy_compute(originalDecl, m);
302        if (localClassDeclCopy_ClassDecl_MemberSubstitutor_list == null) {
303          localClassDeclCopy_ClassDecl_MemberSubstitutor_list = new List();
304          localClassDeclCopy_ClassDecl_MemberSubstitutor_list.is$Final = true;
305          localClassDeclCopy_ClassDecl_MemberSubstitutor_list.setParent(this);
306        }
307        localClassDeclCopy_ClassDecl_MemberSubstitutor_list.add(localClassDeclCopy_ClassDecl_MemberSubstitutor_value);
308        if (localClassDeclCopy_ClassDecl_MemberSubstitutor_value != null) {
309          localClassDeclCopy_ClassDecl_MemberSubstitutor_value = (MemberClassDecl) localClassDeclCopy_ClassDecl_MemberSubstitutor_list.getChild(localClassDeclCopy_ClassDecl_MemberSubstitutor_list.numChildren-1);
310          localClassDeclCopy_ClassDecl_MemberSubstitutor_value.is$Final = true;
311        }
312        if (true) {
313          localClassDeclCopy_ClassDecl_MemberSubstitutor_values.put(_parameters, localClassDeclCopy_ClassDecl_MemberSubstitutor_value);
314        } else {
315        }
316        state.INTERMEDIATE_VALUE |= intermediate;
317    
318        return localClassDeclCopy_ClassDecl_MemberSubstitutor_value;
319      }
320      /**
321       * @apilevel internal
322       */
323      private MemberClassDecl localClassDeclCopy_compute(ClassDecl originalDecl, MemberSubstitutor m) {
324          ClassDecl copy = originalDecl.substitutedClassDecl(m);
325          return new MemberClassDecl(copy);
326        }
327      /**
328       * @apilevel internal
329       */
330      protected List localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list;
331      /**
332       * @apilevel internal
333       */
334      protected java.util.Map localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values;
335      /**
336       * @apilevel internal
337       */
338      private void localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_reset() {
339        localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values = null;
340        localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list = null;
341      }
342      /**
343       * @attribute syn
344       * @aspect LookupParTypeDecl
345       * @declaredat /home/jesper/git/extendj/java5/frontend/Generics.jrag:1341
346       */
347      @ASTNodeAnnotation.Attribute
348      public MemberInterfaceDecl localInterfaceDeclCopy(InterfaceDecl originalDecl, MemberSubstitutor m) {
349        java.util.List _parameters = new java.util.ArrayList(2);
350        _parameters.add(originalDecl);
351        _parameters.add(m);
352        if (localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values == null) localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values = new org.jastadd.util.RobustMap(new java.util.HashMap());
353        ASTNode$State state = state();
354        if (localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values.containsKey(_parameters)) {
355          return (MemberInterfaceDecl) localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values.get(_parameters);
356        }
357        boolean intermediate = state.INTERMEDIATE_VALUE;
358        state.INTERMEDIATE_VALUE = false;
359        int num = state.boundariesCrossed;
360        boolean isFinal = this.is$Final();
361        MemberInterfaceDecl localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value = localInterfaceDeclCopy_compute(originalDecl, m);
362        if (localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list == null) {
363          localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list = new List();
364          localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list.is$Final = true;
365          localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list.setParent(this);
366        }
367        localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list.add(localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value);
368        if (localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value != null) {
369          localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value = (MemberInterfaceDecl) localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list.getChild(localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_list.numChildren-1);
370          localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value.is$Final = true;
371        }
372        if (true) {
373          localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_values.put(_parameters, localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value);
374        } else {
375        }
376        state.INTERMEDIATE_VALUE |= intermediate;
377    
378        return localInterfaceDeclCopy_InterfaceDecl_MemberSubstitutor_value;
379      }
380      /**
381       * @apilevel internal
382       */
383      private MemberInterfaceDecl localInterfaceDeclCopy_compute(InterfaceDecl originalDecl, MemberSubstitutor m) {
384          InterfaceDecl copy = originalDecl.substitutedInterfaceDecl(m);
385          return new MemberInterfaceDecl(copy);
386        }
387      /**
388       * @apilevel internal
389       */
390      protected List constructorCopy_ConstructorDecl_MemberSubstitutor_list;
391      /**
392       * @apilevel internal
393       */
394      protected java.util.Map constructorCopy_ConstructorDecl_MemberSubstitutor_values;
395      /**
396       * @apilevel internal
397       */
398      private void constructorCopy_ConstructorDecl_MemberSubstitutor_reset() {
399        constructorCopy_ConstructorDecl_MemberSubstitutor_values = null;
400        constructorCopy_ConstructorDecl_MemberSubstitutor_list = null;
401      }
402      /**
403       * @attribute syn
404       * @aspect LookupParTypeDecl
405       * @declaredat /home/jesper/git/extendj/java5/frontend/Generics.jrag:1358
406       */
407      @ASTNodeAnnotation.Attribute
408      public ConstructorDecl constructorCopy(ConstructorDecl originalDecl, MemberSubstitutor m) {
409        java.util.List _parameters = new java.util.ArrayList(2);
410        _parameters.add(originalDecl);
411        _parameters.add(m);
412        if (constructorCopy_ConstructorDecl_MemberSubstitutor_values == null) constructorCopy_ConstructorDecl_MemberSubstitutor_values = new org.jastadd.util.RobustMap(new java.util.HashMap());
413        ASTNode$State state = state();
414        if (constructorCopy_ConstructorDecl_MemberSubstitutor_values.containsKey(_parameters)) {
415          return (ConstructorDecl) constructorCopy_ConstructorDecl_MemberSubstitutor_values.get(_parameters);
416        }
417        boolean intermediate = state.INTERMEDIATE_VALUE;
418        state.INTERMEDIATE_VALUE = false;
419        int num = state.boundariesCrossed;
420        boolean isFinal = this.is$Final();
421        ConstructorDecl constructorCopy_ConstructorDecl_MemberSubstitutor_value = originalDecl.substitutedBodyDecl(m);
422        if (constructorCopy_ConstructorDecl_MemberSubstitutor_list == null) {
423          constructorCopy_ConstructorDecl_MemberSubstitutor_list = new List();
424          constructorCopy_ConstructorDecl_MemberSubstitutor_list.is$Final = true;
425          constructorCopy_ConstructorDecl_MemberSubstitutor_list.setParent(this);
426        }
427        constructorCopy_ConstructorDecl_MemberSubstitutor_list.add(constructorCopy_ConstructorDecl_MemberSubstitutor_value);
428        if (constructorCopy_ConstructorDecl_MemberSubstitutor_value != null) {
429          constructorCopy_ConstructorDecl_MemberSubstitutor_value = (ConstructorDecl) constructorCopy_ConstructorDecl_MemberSubstitutor_list.getChild(constructorCopy_ConstructorDecl_MemberSubstitutor_list.numChildren-1);
430          constructorCopy_ConstructorDecl_MemberSubstitutor_value.is$Final = true;
431        }
432        if (true) {
433          constructorCopy_ConstructorDecl_MemberSubstitutor_values.put(_parameters, constructorCopy_ConstructorDecl_MemberSubstitutor_value);
434        } else {
435        }
436        state.INTERMEDIATE_VALUE |= intermediate;
437    
438        return constructorCopy_ConstructorDecl_MemberSubstitutor_value;
439      }
440      /**
441       * @apilevel internal
442       */
443      public ASTNode rewriteTo() {
444        return super.rewriteTo();
445      }
446    }