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.ArrayList;
49 import java.util.List;
50 import java.util.Map;
51
52 import org.codehaus.groovy.ast.GroovyCodeVisitor;
53 import org.codehaus.groovy.classgen.AsmClassGenerator;
54
55 /***
56 * Represents a map expression [1 : 2, "a" : "b", x : y] which creates a mutable Map
57 *
58 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
59 * @version $Revision: 1.6 $
60 */
61 public class MapExpression extends Expression {
62 private List mapEntryExpressions;
63
64 public MapExpression() {
65 this(new ArrayList());
66 }
67
68 public MapExpression(List mapEntryExpressions) {
69 this.mapEntryExpressions = mapEntryExpressions;
70 }
71
72 public void addMapEntryExpression(MapEntryExpression expression) {
73 mapEntryExpressions.add(expression);
74 }
75
76 public List getMapEntryExpressions() {
77 return mapEntryExpressions;
78 }
79
80 public void visit(GroovyCodeVisitor visitor) {
81 visitor.visitMapExpression(this);
82 }
83
84 public boolean isDynamic() {
85 return false;
86 }
87
88 public Expression transformExpression(ExpressionTransformer transformer) {
89 return new MapExpression(transformExpressions(getMapEntryExpressions(), transformer));
90 }
91
92 public String toString() {
93 return super.toString() + mapEntryExpressions;
94 }
95
96 public String getText() {
97 StringBuffer sb = new StringBuffer(32);
98 sb.append("[");
99 int size = mapEntryExpressions.size();
100 MapEntryExpression mapEntryExpression = null;
101 if (size > 0) {
102 mapEntryExpression = (MapEntryExpression) mapEntryExpressions.get(0);
103 sb.append(mapEntryExpression.getKeyExpression().getText() + ":" + mapEntryExpression.getValueExpression().getText());
104 for (int i = 1; i < size; i++) {
105 mapEntryExpression = (MapEntryExpression) mapEntryExpressions.get(i);
106 sb.append(", " + mapEntryExpression.getKeyExpression().getText() + ":" + mapEntryExpression.getValueExpression().getText());
107 if (sb.length() > 120 && i < size - 1) {
108 sb.append(", ... ");
109 break;
110 }
111 }
112 }
113 sb.append("]");
114 return sb.toString();
115 }
116
117 public void addMapEntryExpression(Expression keyExpression, Expression valueExpression) {
118 addMapEntryExpression(new MapEntryExpression(keyExpression, valueExpression));
119 }
120
121 protected void resolveType(AsmClassGenerator resolver) {
122 for (int i = 0; i < mapEntryExpressions.size(); i++) {
123 MapEntryExpression mapEntryExpression = (MapEntryExpression) mapEntryExpressions.get(i);
124 mapEntryExpression.resolve(resolver);
125 }
126 super.setTypeClass(Map.class);
127 }
128 }