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:28
027     * @production PackageAccess : {@link Access} ::= <span class="component">&lt;Package:String&gt;</span>;
028    
029     */
030    public class PackageAccess extends Access implements Cloneable {
031      /**
032       * @aspect NameCheck
033       * @declaredat /home/jesper/git/extendj/java4/frontend/NameCheck.jrag:82
034       */
035      public void nameCheck() {
036        if (!hasPackage(packageName())) {
037          errorf("package %s not found", packageName());
038        }
039      }
040      /**
041       * @aspect NodeConstructors
042       * @declaredat /home/jesper/git/extendj/java4/frontend/NodeConstructors.jrag:39
043       */
044      public PackageAccess(String name, int start, int end) {
045        this(name);
046        this.start = this.Packagestart = start;
047        this.end = this.Packageend = end;
048      }
049      /**
050       * @aspect Java4PrettyPrint
051       * @declaredat /home/jesper/git/extendj/java4/frontend/PrettyPrint.jadd:139
052       */
053      public void prettyPrint(PrettyPrinter out) {
054        out.print(getPackage());
055      }
056      /**
057       * @declaredat ASTNode:1
058       */
059      public PackageAccess() {
060        super();
061      }
062      /**
063       * Initializes the child array to the correct size.
064       * Initializes List and Opt nta children.
065       * @apilevel internal
066       * @ast method
067       * @declaredat ASTNode:10
068       */
069      public void init$Children() {
070      }
071      /**
072       * @declaredat ASTNode:12
073       */
074      public PackageAccess(String p0) {
075        setPackage(p0);
076      }
077      /**
078       * @declaredat ASTNode:15
079       */
080      public PackageAccess(beaver.Symbol p0) {
081        setPackage(p0);
082      }
083      /**
084       * @apilevel low-level
085       * @declaredat ASTNode:21
086       */
087      protected int numChildren() {
088        return 0;
089      }
090      /**
091       * @apilevel internal
092       * @declaredat ASTNode:27
093       */
094      public boolean mayHaveRewrite() {
095        return false;
096      }
097      /**
098       * @apilevel internal
099       * @declaredat ASTNode:33
100       */
101      public void flushAttrCache() {
102        super.flushAttrCache();
103      }
104      /**
105       * @apilevel internal
106       * @declaredat ASTNode:39
107       */
108      public void flushCollectionCache() {
109        super.flushCollectionCache();
110      }
111      /**
112       * @apilevel internal
113       * @declaredat ASTNode:45
114       */
115      public void flushRewriteCache() {
116        super.flushRewriteCache();
117      }
118      /**
119       * @apilevel internal
120       * @declaredat ASTNode:51
121       */
122      public PackageAccess clone() throws CloneNotSupportedException {
123        PackageAccess node = (PackageAccess) super.clone();
124        return node;
125      }
126      /**
127       * @apilevel internal
128       * @declaredat ASTNode:58
129       */
130      public PackageAccess copy() {
131        try {
132          PackageAccess node = (PackageAccess) clone();
133          node.parent = null;
134          if (children != null) {
135            node.children = (ASTNode[]) children.clone();
136          }
137          return node;
138        } catch (CloneNotSupportedException e) {
139          throw new Error("Error: clone not supported for " + getClass().getName());
140        }
141      }
142      /**
143       * Create a deep copy of the AST subtree at this node.
144       * The copy is dangling, i.e. has no parent.
145       * @return dangling copy of the subtree at this node
146       * @apilevel low-level
147       * @deprecated Please use treeCopy or treeCopyNoTransform instead
148       * @declaredat ASTNode:77
149       */
150      @Deprecated
151      public PackageAccess fullCopy() {
152        return treeCopyNoTransform();
153      }
154      /**
155       * Create a deep copy of the AST subtree at this node.
156       * The copy is dangling, i.e. has no parent.
157       * @return dangling copy of the subtree at this node
158       * @apilevel low-level
159       * @declaredat ASTNode:87
160       */
161      public PackageAccess treeCopyNoTransform() {
162        PackageAccess tree = (PackageAccess) copy();
163        if (children != null) {
164          for (int i = 0; i < children.length; ++i) {
165            ASTNode child = (ASTNode) children[i];
166            if (child != null) {
167              child = child.treeCopyNoTransform();
168              tree.setChild(child, i);
169            }
170          }
171        }
172        return tree;
173      }
174      /**
175       * Create a deep copy of the AST subtree at this node.
176       * The subtree of this node is traversed to trigger rewrites before copy.
177       * The copy is dangling, i.e. has no parent.
178       * @return dangling copy of the subtree at this node
179       * @apilevel low-level
180       * @declaredat ASTNode:107
181       */
182      public PackageAccess treeCopy() {
183        doFullTraversal();
184        return treeCopyNoTransform();
185      }
186      /**
187       * @apilevel internal
188       * @declaredat ASTNode:114
189       */
190      protected boolean is$Equal(ASTNode node) {
191        return super.is$Equal(node) && (tokenString_Package == ((PackageAccess)node).tokenString_Package);    
192      }
193      /**
194       * Replaces the lexeme Package.
195       * @param value The new value for the lexeme Package.
196       * @apilevel high-level
197       */
198      public void setPackage(String value) {
199        tokenString_Package = value;
200      }
201      /**
202       * @apilevel internal
203       */
204      protected String tokenString_Package;
205      /**
206       */
207      public int Packagestart;
208      /**
209       */
210      public int Packageend;
211      /**
212       * JastAdd-internal setter for lexeme Package using the Beaver parser.
213       * @param symbol Symbol containing the new value for the lexeme Package
214       * @apilevel internal
215       */
216      public void setPackage(beaver.Symbol symbol) {
217        if (symbol.value != null && !(symbol.value instanceof String))
218        throw new UnsupportedOperationException("setPackage is only valid for String lexemes");
219        tokenString_Package = (String)symbol.value;
220        Packagestart = symbol.getStart();
221        Packageend = symbol.getEnd();
222      }
223      /**
224       * Retrieves the value for the lexeme Package.
225       * @return The value for the lexeme Package.
226       * @apilevel high-level
227       */
228      @ASTNodeAnnotation.Token(name="Package")
229      public String getPackage() {
230        return tokenString_Package != null ? tokenString_Package : "";
231      }
232      /**
233       * @attribute syn
234       * @aspect LookupFullyQualifiedTypes
235       * @declaredat /home/jesper/git/extendj/java4/frontend/LookupType.jrag:112
236       */
237      @ASTNodeAnnotation.Attribute
238      public boolean hasQualifiedPackage(String packageName) {
239        boolean hasQualifiedPackage_String_value = hasPackage(packageName() + "." + packageName);
240    
241        return hasQualifiedPackage_String_value;
242      }
243      /**
244       * @attribute syn
245       * @aspect TypeScopePropagation
246       * @declaredat /home/jesper/git/extendj/java4/frontend/LookupType.jrag:553
247       */
248      @ASTNodeAnnotation.Attribute
249      public SimpleSet qualifiedLookupType(String name) {
250        {
251            SimpleSet c = SimpleSet.emptySet;
252            TypeDecl typeDecl = lookupType(packageName(), name);
253            if (!typeDecl.isUnknown()) {
254              if (hostType() != null && typeDecl.accessibleFrom(hostType())) {
255                c = c.add(typeDecl);
256              } else if (hostType() == null && typeDecl.accessibleFromPackage(hostPackage())) {
257                c = c.add(typeDecl);
258              }
259            }
260            return c;
261          }
262      }
263      /**
264       * @attribute syn
265       * @aspect VariableScope
266       * @declaredat /home/jesper/git/extendj/java4/frontend/LookupVariable.jrag:237
267       */
268      @ASTNodeAnnotation.Attribute
269      public SimpleSet qualifiedLookupVariable(String name) {
270        SimpleSet qualifiedLookupVariable_String_value = SimpleSet.emptySet;
271    
272        return qualifiedLookupVariable_String_value;
273      }
274      /**
275       * @attribute syn
276       * @aspect Names
277       * @declaredat /home/jesper/git/extendj/java4/frontend/QualifiedNames.jrag:42
278       */
279      @ASTNodeAnnotation.Attribute
280      public String name() {
281        String name_value = getPackage();
282    
283        return name_value;
284      }
285      /**
286       * @attribute syn
287       * @aspect Names
288       * @declaredat /home/jesper/git/extendj/java4/frontend/QualifiedNames.jrag:44
289       */
290      @ASTNodeAnnotation.Attribute
291      public String packageName() {
292        {
293            StringBuilder sb = new StringBuilder();
294            if (hasPrevExpr()) {
295              sb.append(prevExpr().packageName());
296              sb.append(".");
297            }
298            sb.append(getPackage());
299            return sb.toString();
300          }
301      }
302      /**
303       * @attribute syn
304       * @aspect AccessTypes
305       * @declaredat /home/jesper/git/extendj/java4/frontend/ResolveAmbiguousNames.jrag:59
306       */
307      @ASTNodeAnnotation.Attribute
308      public boolean isPackageAccess() {
309        boolean isPackageAccess_value = true;
310    
311        return isPackageAccess_value;
312      }
313      /**
314       * Defines the expected kind of name for the left hand side in a qualified
315       * expression.
316       * @attribute syn
317       * @aspect SyntacticClassification
318       * @declaredat /home/jesper/git/extendj/java4/frontend/SyntacticClassification.jrag:58
319       */
320      @ASTNodeAnnotation.Attribute
321      public NameType predNameType() {
322        NameType predNameType_value = NameType.PACKAGE_NAME;
323    
324        return predNameType_value;
325      }
326      /**
327       * @attribute syn
328       * @aspect TypeHierarchyCheck
329       * @declaredat /home/jesper/git/extendj/java4/frontend/TypeHierarchyCheck.jrag:41
330       */
331      @ASTNodeAnnotation.Attribute
332      public boolean isUnknown() {
333        boolean isUnknown_value = !hasPackage(packageName());
334    
335        return isUnknown_value;
336      }
337      /**
338       * @attribute inh
339       * @aspect NameCheck
340       * @declaredat /home/jesper/git/extendj/java4/frontend/NameCheck.jrag:308
341       */
342      /**
343       * @attribute inh
344       * @aspect NameCheck
345       * @declaredat /home/jesper/git/extendj/java4/frontend/NameCheck.jrag:308
346       */
347      @ASTNodeAnnotation.Attribute
348      public boolean hasPackage(String packageName) {
349        boolean hasPackage_String_value = getParent().Define_hasPackage(this, null, packageName);
350    
351        return hasPackage_String_value;
352      }
353      /**
354       * @apilevel internal
355       */
356      public ASTNode rewriteTo() {
357        return super.rewriteTo();
358      }
359    }