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/java4/grammar/Java.ast:97
027     * @production MemberInterfaceDecl : {@link MemberTypeDecl} ::= <span class="component">{@link InterfaceDecl}</span>;
028    
029     */
030    public class MemberInterfaceDecl extends MemberTypeDecl implements Cloneable {
031      /**
032       * @aspect Modifiers
033       * @declaredat /home/jesper/git/extendj/java4/frontend/Modifiers.jrag:225
034       */
035      public void checkModifiers() {
036        super.checkModifiers();
037        if (hostType().isInnerClass()) {
038          error("*** Inner classes may not declare member interfaces");
039        }
040      }
041      /**
042       * @aspect Java4PrettyPrint
043       * @declaredat /home/jesper/git/extendj/java4/frontend/PrettyPrint.jadd:119
044       */
045      public void prettyPrint(PrettyPrinter out) {
046        out.print(getInterfaceDecl());
047      }
048      /**
049       * @declaredat ASTNode:1
050       */
051      public MemberInterfaceDecl() {
052        super();
053      }
054      /**
055       * Initializes the child array to the correct size.
056       * Initializes List and Opt nta children.
057       * @apilevel internal
058       * @ast method
059       * @declaredat ASTNode:10
060       */
061      public void init$Children() {
062        children = new ASTNode[1];
063      }
064      /**
065       * @declaredat ASTNode:13
066       */
067      public MemberInterfaceDecl(InterfaceDecl p0) {
068        setChild(p0, 0);
069      }
070      /**
071       * @apilevel low-level
072       * @declaredat ASTNode:19
073       */
074      protected int numChildren() {
075        return 1;
076      }
077      /**
078       * @apilevel internal
079       * @declaredat ASTNode:25
080       */
081      public boolean mayHaveRewrite() {
082        return false;
083      }
084      /**
085       * @apilevel internal
086       * @declaredat ASTNode:31
087       */
088      public void flushAttrCache() {
089        super.flushAttrCache();
090      }
091      /**
092       * @apilevel internal
093       * @declaredat ASTNode:37
094       */
095      public void flushCollectionCache() {
096        super.flushCollectionCache();
097      }
098      /**
099       * @apilevel internal
100       * @declaredat ASTNode:43
101       */
102      public void flushRewriteCache() {
103        super.flushRewriteCache();
104      }
105      /**
106       * @apilevel internal
107       * @declaredat ASTNode:49
108       */
109      public MemberInterfaceDecl clone() throws CloneNotSupportedException {
110        MemberInterfaceDecl node = (MemberInterfaceDecl) super.clone();
111        return node;
112      }
113      /**
114       * @apilevel internal
115       * @declaredat ASTNode:56
116       */
117      public MemberInterfaceDecl copy() {
118        try {
119          MemberInterfaceDecl node = (MemberInterfaceDecl) clone();
120          node.parent = null;
121          if (children != null) {
122            node.children = (ASTNode[]) children.clone();
123          }
124          return node;
125        } catch (CloneNotSupportedException e) {
126          throw new Error("Error: clone not supported for " + getClass().getName());
127        }
128      }
129      /**
130       * Create a deep copy of the AST subtree at this node.
131       * The copy is dangling, i.e. has no parent.
132       * @return dangling copy of the subtree at this node
133       * @apilevel low-level
134       * @deprecated Please use treeCopy or treeCopyNoTransform instead
135       * @declaredat ASTNode:75
136       */
137      @Deprecated
138      public MemberInterfaceDecl fullCopy() {
139        return treeCopyNoTransform();
140      }
141      /**
142       * Create a deep copy of the AST subtree at this node.
143       * The copy is dangling, i.e. has no parent.
144       * @return dangling copy of the subtree at this node
145       * @apilevel low-level
146       * @declaredat ASTNode:85
147       */
148      public MemberInterfaceDecl treeCopyNoTransform() {
149        MemberInterfaceDecl tree = (MemberInterfaceDecl) copy();
150        if (children != null) {
151          for (int i = 0; i < children.length; ++i) {
152            ASTNode child = (ASTNode) children[i];
153            if (child != null) {
154              child = child.treeCopyNoTransform();
155              tree.setChild(child, i);
156            }
157          }
158        }
159        return tree;
160      }
161      /**
162       * Create a deep copy of the AST subtree at this node.
163       * The subtree of this node is traversed to trigger rewrites before copy.
164       * The copy is dangling, i.e. has no parent.
165       * @return dangling copy of the subtree at this node
166       * @apilevel low-level
167       * @declaredat ASTNode:105
168       */
169      public MemberInterfaceDecl treeCopy() {
170        doFullTraversal();
171        return treeCopyNoTransform();
172      }
173      /**
174       * @apilevel internal
175       * @declaredat ASTNode:112
176       */
177      protected boolean is$Equal(ASTNode node) {
178        return super.is$Equal(node);    
179      }
180      /**
181       * Replaces the InterfaceDecl child.
182       * @param node The new node to replace the InterfaceDecl child.
183       * @apilevel high-level
184       */
185      public void setInterfaceDecl(InterfaceDecl node) {
186        setChild(node, 0);
187      }
188      /**
189       * Retrieves the InterfaceDecl child.
190       * @return The current node used as the InterfaceDecl child.
191       * @apilevel high-level
192       */
193      @ASTNodeAnnotation.Child(name="InterfaceDecl")
194      public InterfaceDecl getInterfaceDecl() {
195        return (InterfaceDecl) getChild(0);
196      }
197      /**
198       * Retrieves the InterfaceDecl child.
199       * <p><em>This method does not invoke AST transformations.</em></p>
200       * @return The current node used as the InterfaceDecl child.
201       * @apilevel low-level
202       */
203      public InterfaceDecl getInterfaceDeclNoTransform() {
204        return (InterfaceDecl) getChildNoTransform(0);
205      }
206      /**
207       * @attribute syn
208       * @aspect TypeScopePropagation
209       * @declaredat /home/jesper/git/extendj/java4/frontend/LookupType.jrag:604
210       */
211      @ASTNodeAnnotation.Attribute
212      public TypeDecl typeDecl() {
213        TypeDecl typeDecl_value = getInterfaceDecl();
214    
215        return typeDecl_value;
216      }
217      /**
218       * @attribute syn
219       * @aspect PreciseRethrow
220       * @declaredat /home/jesper/git/extendj/java8/frontend/EffectivelyFinal.jrag:40
221       */
222      @ASTNodeAnnotation.Attribute
223      public boolean modifiedInScope(Variable var) {
224        boolean modifiedInScope_Variable_value = getInterfaceDecl().modifiedInScope(var);
225    
226        return modifiedInScope_Variable_value;
227      }
228      /**
229       * @declaredat /home/jesper/git/extendj/java4/frontend/TypeAnalysis.jrag:577
230       * @apilevel internal
231       */
232      public boolean Define_isMemberType(ASTNode caller, ASTNode child) {
233        if (caller == getInterfaceDeclNoTransform()) {
234          // @declaredat /home/jesper/git/extendj/java4/frontend/TypeAnalysis.jrag:579
235          return true;
236        }
237        else {
238          return getParent().Define_isMemberType(this, caller);
239        }
240      }
241      protected boolean canDefine_isMemberType(ASTNode caller, ASTNode child) {
242        return true;
243      }
244      /**
245       * @apilevel internal
246       */
247      public ASTNode rewriteTo() {
248        return super.rewriteTo();
249      }
250    }