001 002 package org.codehaus.groovy.runtime; 003 004 005 import groovy.lang.Closure; 006 007 /** 008 * Represents wrapper around a Closure to support currying 009 * 010 * @author Jochen Theodorou 011 */ 012 public class CurriedClosure extends Closure { 013 014 private Object[] curriedParams; 015 016 public CurriedClosure(Closure uncurriedClosure, Object[] arguments) { 017 super(uncurriedClosure); 018 curriedParams = arguments; 019 maximumNumberOfParameters = uncurriedClosure.getMaximumNumberOfParameters()-arguments.length; 020 } 021 022 public Object[] getUncurriedArguments(Object[] arguments) { 023 final Object newCurriedParams[] = new Object[curriedParams.length + arguments.length]; 024 System.arraycopy(curriedParams, 0, newCurriedParams, 0, curriedParams.length); 025 System.arraycopy(arguments, 0, newCurriedParams, curriedParams.length, arguments.length); 026 return newCurriedParams; 027 } 028 029 }