/* Function.java

	Purpose:
		
	Description:
		
	History:
		Thu Aug 30 10:24:49     2007, Created by tomyeh

Copyright (C) 2007 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.xel;

import java.lang.reflect.Method;

/**
 * Represents a XEL function.
 *
 * @author tomyeh
 * @since 3.0.0
 */
public interface Function {
	/** Returns an array of Class objects that represent the formal
	 * parameter types, in declaration order, of the method represented
	 * by this Method object.
	 *
	 * <p>Returns an array of length 0 if the underlying method
	 * takes no parameters.
	 */
	public Class<?>[] getParameterTypes();
	/** Returns a Class object that represents the formal return type
	 * of the method
	 * represented by this Method object.
	 */
	public Class<?> getReturnType();
	/** Invokes this method with the specified arguments.
	 *
	 * @param obj the object the underlying method is invoked from.
	 * It is always null if this function is invoked in an XEL expression.
	 * It is reserved for more sophisticated expressions, such as
	 * ZK Spreadsheet's expressions.
	 * @param args the arguments used for the method call.
	 * If null, an Object array with zero length is assumed.
	 */
	public Object invoke(Object obj, Object... args) throws Exception;

	/** Converts this function to a method, or null if unable to convert.
	 */
	public Method toMethod();
}
