1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package org.codehaus.groovy.ast.expr;
47
48 import java.util.Collections;
49 import java.util.Iterator;
50 import java.util.List;
51
52 import org.codehaus.groovy.ast.GroovyCodeVisitor;
53 import org.codehaus.groovy.classgen.AsmClassGenerator;
54
55 /***
56 * Represents an array object construction either using a fixed size
57 * or an initializer expression
58 *
59 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
60 * @version $Revision: 1.12 $
61 */
62 public class ArrayExpression extends Expression {
63 private List expressions;
64 private Expression sizeExpression;
65
66 private String elementType;
67 /***
68 * Creates an array using an initializer expression
69 */
70 public ArrayExpression(String type, List expressions) {
71 if (!type.endsWith("[]")) type += "[]";
72 setSuperType(type);
73 this.elementType = type;
74 this.expressions = expressions;
75
76 for (Iterator iter = expressions.iterator(); iter.hasNext();) {
77 Object item = iter.next();
78 if (!(item instanceof Expression)) {
79 throw new ClassCastException("Item: " + item + " is not an Expression");
80 }
81 }
82 }
83
84 private void setSuperType(String type) {
85 if (type == null) System.out.println("setSuperType: null");
86 if (type.endsWith("[]")) {
87 }
88 else {
89 type += "[]";
90 }
91 super.setType(type);
92 }
93
94 /***
95 * Creates an empty array of a certain size
96 */
97 public ArrayExpression(String type, Expression sizeExpression) {
98 if (!type.endsWith("[]")) type += "[]";
99 setSuperType(type);
100 this.elementType = type;
101 this.sizeExpression = sizeExpression;
102 this.expressions = Collections.EMPTY_LIST;
103 }
104
105 public void addExpression(Expression expression) {
106 expressions.add(expression);
107 }
108
109 public List getExpressions() {
110 return expressions;
111 }
112
113 public void visit(GroovyCodeVisitor visitor) {
114 visitor.visitArrayExpression(this);
115 }
116
117 public boolean isDynamic() {
118 return false;
119 }
120
121 public Expression transformExpression(ExpressionTransformer transformer) {
122 return new ArrayExpression(type, transformExpressions(expressions, transformer));
123 }
124
125 public Expression getExpression(int i) {
126 Object object = expressions.get(i);
127 return (Expression) object;
128 }
129
130 public String getElementType() {
131 return elementType;
132 }
133
134 public String getText() {
135 StringBuffer buffer = new StringBuffer("[");
136 boolean first = true;
137 for (Iterator iter = expressions.iterator(); iter.hasNext();) {
138 if (first) {
139 first = false;
140 }
141 else {
142 buffer.append(", ");
143 }
144
145 buffer.append(((Expression) iter.next()).getText());
146 }
147 buffer.append("]");
148 return buffer.toString();
149 }
150
151 public Expression getSizeExpression() {
152 return sizeExpression;
153 }
154
155 public String toString() {
156 return super.toString() + expressions;
157 }
158
159 protected void resolveType(AsmClassGenerator resolver) {
160
161 }
162 }