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.lang.reflect.Constructor;
49
50 import org.codehaus.groovy.ast.GroovyCodeVisitor;
51 import org.codehaus.groovy.classgen.AsmClassGenerator2;
52
53 /***
54 * A constructor call
55 *
56 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
57 * @version $Revision: 1.5 $
58 */
59 public class ConstructorCallExpression extends Expression {
60
61 private Expression arguments;
62
63 public String getTypeToSet() {
64 return typeToSet;
65 }
66
67 private String typeToSet;
68
69 public Constructor getConstructor() {
70 return constructor;
71 }
72
73 private Constructor constructor = null;
74
75 protected boolean shouldContinue() {
76 if (super.isResolveFailed())
77 return false;
78 if (constructor == null)
79 return true;
80 return false;
81 }
82
83 public ConstructorCallExpression(String type, Expression arguments) {
84
85 this.typeToSet = type;
86 setTypeResolved(false);
87 this.arguments = arguments;
88 }
89
90 public void visit(GroovyCodeVisitor visitor) {
91 visitor.visitConstructorCallExpression(this);
92 }
93
94 public Expression transformExpression(ExpressionTransformer transformer) {
95 return new ConstructorCallExpression(type, transformer.transform(arguments));
96 }
97
98 protected void resolveType(AsmClassGenerator2 resolver) {
99 arguments.resolve(resolver);
100 if (constructor == null) {
101 resolver.resolve(this);
102 }
103
104
105
106
107 }
108
109 public String getType() {
110 if (type == null) {
111 if (typeToSet != null && typeToSet.length() > 0) {
112 return typeToSet;
113 }
114 else {
115 return "java.lang.Object";
116 }
117 }
118 return type;
119 }
120
121 public Expression getArguments() {
122 return arguments;
123 }
124
125 public String getText() {
126 return "new " + type + "(" + arguments.getText() + ")";
127 }
128
129 public String toString() {
130 return super.toString() + "[type: " + type + " arguments: " + arguments + "]";
131 }
132
133 public void setConstructor(Constructor ctor) {
134 constructor = ctor;
135 super.setTypeClass(ctor.getDeclaringClass());
136 }
137 }