KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > polyglot > ext > jl > ast > AmbQualifierNode_c


1 package polyglot.ext.jl.ast;
2
3 import polyglot.ast.*;
4 import polyglot.types.*;
5 import polyglot.visit.*;
6 import polyglot.util.*;
7
8 /**
9  * An <code>AmbQualifierNode</code> is an ambiguous AST node composed of
10  * dot-separated list of identifiers that must resolve to a type qualifier.
11  */

12 public class AmbQualifierNode_c extends Node_c implements AmbQualifierNode
13 {
14     protected Qualifier qualifier;
15     protected QualifierNode qual;
16     protected String JavaDoc name;
17
18     public AmbQualifierNode_c(Position pos, QualifierNode qual, String JavaDoc name) {
19     super(pos);
20
21     this.qual = qual;
22     this.name = name;
23     }
24
25     public Qualifier qualifier() {
26     return this.qualifier;
27     }
28
29     public String JavaDoc name() {
30     return this.name;
31     }
32
33     public AmbQualifierNode name(String JavaDoc name) {
34     AmbQualifierNode_c n = (AmbQualifierNode_c) copy();
35     n.name = name;
36     return n;
37     }
38
39     public QualifierNode qual() {
40     return this.qual;
41     }
42
43     public AmbQualifierNode qual(QualifierNode qual) {
44     AmbQualifierNode_c n = (AmbQualifierNode_c) copy();
45     n.qual = qual;
46     return n;
47     }
48
49     public AmbQualifierNode qualifier(Qualifier qualifier) {
50     AmbQualifierNode_c n = (AmbQualifierNode_c) copy();
51     n.qualifier = qualifier;
52     return n;
53     }
54
55     protected AmbQualifierNode_c reconstruct(QualifierNode qual) {
56     if (qual != this.qual) {
57         AmbQualifierNode_c n = (AmbQualifierNode_c) copy();
58         n.qual = qual;
59         return n;
60     }
61
62     return this;
63     }
64
65     public Node visitChildren(NodeVisitor v) {
66     QualifierNode qual = (QualifierNode) visitChild(this.qual, v);
67     return reconstruct(qual);
68     }
69
70     public Node buildTypes(TypeBuilder tb) throws SemanticException {
71         return qualifier(tb.typeSystem().unknownQualifier(position()));
72     }
73
74     public Node disambiguate(AmbiguityRemover sc) throws SemanticException {
75     Node n = sc.nodeFactory().disamb().disambiguate(this, sc, position(), qual, name);
76
77     if (n instanceof QualifierNode) {
78         return n;
79     }
80
81     throw new SemanticException("Could not find type or package \"" +
82             (qual == null ? name : qual.toString() + "." + name) +
83         "\".", position());
84     }
85
86     public Node typeCheck(TypeChecker tc) throws SemanticException {
87     throw new InternalCompilerError(position(),
88         "Cannot type check ambiguous node " + this + ".");
89     }
90
91     public Node exceptionCheck(ExceptionChecker ec) throws SemanticException {
92     throw new InternalCompilerError(position(),
93         "Cannot exception check ambiguous node " + this + ".");
94     }
95
96     public void prettyPrint(CodeWriter w, PrettyPrinter tr) {
97     if (qual != null) {
98             print(qual, w, tr);
99             w.write(".");
100         }
101                 
102         w.write(name);
103     }
104
105     public void translate(CodeWriter w, Translator tr) {
106       throw new InternalCompilerError(position(),
107                                       "Cannot translate ambiguous node "
108                                       + this + ".");
109     }
110
111     public String JavaDoc toString() {
112     return (qual == null
113         ? name
114         : qual.toString() + "." + name) + "{amb}";
115     }
116
117   public void dump(CodeWriter w) {
118     super.dump(w);
119
120     w.allowBreak(4, " ");
121     w.begin(0);
122     w.write("(name \"" + name + "\")");
123     w.end();
124   }
125 }
126
Popular Tags