1 46 package org.codehaus.groovy.ast.expr; 47 48 import groovy.lang.MetaMethod; 49 50 import org.codehaus.groovy.ast.GroovyCodeVisitor; 51 import org.codehaus.groovy.classgen.AsmClassGenerator2; 52 53 59 public class MethodCallExpression extends Expression { 60 61 private Expression objectExpression; 62 private String method; 63 private Expression arguments; 64 private boolean safe; 65 private boolean implicitThis; 66 67 public MetaMethod getMetaMethod() { 68 return metaMethod; 69 } 70 71 private MetaMethod metaMethod = null; 72 73 public MethodCallExpression(Expression objectExpression, String method, Expression arguments) { 74 this.objectExpression = objectExpression; 75 this.method = method; 76 this.arguments = arguments; 77 } 78 79 public void visit(GroovyCodeVisitor visitor) { 80 visitor.visitMethodCallExpression(this); 81 } 82 83 public Expression transformExpression(ExpressionTransformer transformer) { 84 MethodCallExpression answer = 85 new MethodCallExpression(transformer.transform(objectExpression), method, transformer.transform(arguments)); 86 answer.setSafe(safe); 87 return answer; 88 } 89 90 protected void resolveType(AsmClassGenerator2 resolver) { 91 this.objectExpression.resolve(resolver); 92 this.arguments.resolve(resolver); 93 resolver.resolve(this); 94 } 95 96 public Expression getArguments() { 97 return arguments; 98 } 99 100 public String getMethod() { 101 return method; 102 } 103 104 public Expression getObjectExpression() { 105 return objectExpression; 106 } 107 108 public String getText() { 109 return objectExpression.getText() + "." + method + arguments.getText(); 110 } 111 112 116 public boolean isSafe() { 117 return safe; 118 } 119 120 public void setSafe(boolean safe) { 121 this.safe = safe; 122 } 123 124 129 public boolean isImplicitThis() { 130 return implicitThis; 131 } 132 133 public void setImplicitThis(boolean implicitThis) { 134 this.implicitThis = implicitThis; 135 } 136 137 public String toString() { 138 return super.toString() 139 + "[object: " 140 + objectExpression 141 + " method: " 142 + method 143 + " arguments: " 144 + arguments 145 + "]"; 146 } 147 148 public static boolean isSuperMethodCall(MethodCallExpression call) { 149 Expression expression = call.getObjectExpression(); 150 if (expression instanceof VariableExpression) { 151 VariableExpression varExp = (VariableExpression) expression; 152 String variable = varExp.getVariable(); 153 return variable.equals("super"); 154 } 155 return false; 156 } 157 158 public void setMethod(MetaMethod mmeth) { 159 this.metaMethod = mmeth; 160 super.setTypeClass(mmeth.getReturnType()); 161 } 162 } 163 | Popular Tags |