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