001 package org.codehaus.groovy.runtime;
002
003 import groovy.lang.Closure;
004 import groovy.lang.MetaClass;
005
006
007 /**
008 * Represents a method on an object using a closure which can be invoked
009 * at any time
010 *
011 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
012 * @version $Revision: 1.6 $
013 */
014 public class MethodClosure extends Closure {
015
016 private String method;
017 MetaClass metaClass = InvokerHelper.getMetaClass(this);
018
019 public MethodClosure(Object delegate) {
020 super(delegate);
021 }
022
023 public MethodClosure(Object owner, String method) {
024 super(owner);
025 this.method = method;
026 }
027
028 public String getMethod() {
029 return method;
030 }
031
032 public Object call(Object arguments) {
033 return InvokerHelper.invokeMethod(getDelegate(), method, arguments);
034 }
035
036 public MetaClass getMetaClass() {
037 return metaClass;
038 }
039
040 public void setMetaClass(MetaClass metaClass) {
041 this.metaClass = metaClass;
042 }
043
044 protected Object doCall(Object arguments) {
045 return InvokerHelper.invokeMethod(getDelegate(), method, arguments);
046 }
047 }