1 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 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; 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 this.typeToSet = type; 86 setTypeResolved(false); 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 } 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 } 138 | Popular Tags |