1 46 package org.codehaus.groovy.ast.expr; 47 48 import java.util.ArrayList ; 49 import java.util.Iterator ; 50 import java.util.List ; 51 52 import org.codehaus.groovy.ast.GroovyCodeVisitor; 53 import org.codehaus.groovy.classgen.AsmClassGenerator2; 54 55 61 public class ListExpression extends Expression { 62 private List expressions; 63 64 public ListExpression() { 65 this(new ArrayList ()); 66 } 67 68 public ListExpression(List expressions) { 69 this.expressions = expressions; 70 } 72 73 public void addExpression(Expression expression) { 74 expressions.add(expression); 75 } 76 77 public List getExpressions() { 78 return expressions; 79 } 80 81 public void visit(GroovyCodeVisitor visitor) { 82 visitor.visitListExpression(this); 83 } 84 85 public Expression transformExpression(ExpressionTransformer transformer) { 86 return new ListExpression(transformExpressions(getExpressions(), transformer)); 87 } 88 89 protected void resolveType(AsmClassGenerator2 resolver) { 90 for (int i = 0; i < expressions.size(); i++) { 91 Expression expression = (Expression) expressions.get(i); 92 expression.resolve(resolver); 93 } 94 super.setTypeClass(List .class); 95 } 96 97 public Expression getExpression(int i) { 98 return (Expression) expressions.get(i); 99 } 100 101 public String getText() { 102 StringBuffer buffer = new StringBuffer ("["); 103 boolean first = true; 104 for (Iterator iter = expressions.iterator(); iter.hasNext(); ) { 105 if (first) { 106 first = false; 107 } 108 else { 109 buffer.append(", "); 110 } 111 112 buffer.append(((Expression)iter.next()).getText()); 113 } 114 buffer.append("]"); 115 return buffer.toString(); 116 } 117 118 public String toString() { 119 return super.toString() + expressions; 120 } 121 122 126 public Class getComponentTypeClass() { 127 boolean first = true; 128 Class cls = null; 129 130 for (Iterator iter = expressions.iterator(); iter.hasNext(); ) { 131 Expression exp = (Expression) iter.next(); 132 if (cls == null) { 133 cls = exp.getTypeClass(); 134 } 135 else { 136 if (cls != exp.getTypeClass()) { 137 return null; 139 } 140 } 141 } 142 return cls; 143 } 144 145 146 } 147 | Popular Tags |