001// Copyright 2011 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007// http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry5.plastic;
016
017import java.lang.reflect.Method;
018
019/**
020 * Similiar to {@link Method}, this allows a method of a Plastic class to be invoked regardless of visibility. Plastic
021 * ensures that reflection is not necessary.
022 */
023public interface MethodHandle
024{
025    /**
026     * Invokes the method for this handle on the instance.
027     * 
028     * @param instance
029     *            the instance containing the method to invoke
030     * @param arguments
031     *            the arguments, if any, to pass to the method. Wrapper types will be unwrapped as necessary
032     *            to perform the invocation.
033     * @return result object encapsulating the actual return value or the checked exception thrown by the method
034     * @throws ClassCastException
035     *             if instance is not the correct type for this method.
036     * @throws RuntimeException
037     *             if the actual method throws a runtime exception
038     */
039    MethodInvocationResult invoke(Object instance, Object... arguments);
040}