001    // Copyright 2004, 2005 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    package org.apache.tapestry.enhance;
015    
016    
017    /**
018     * A representation of a {@link java.lang.reflect.Method}, identifying the name, return type,
019     * parameter types and exception types. Actual Method objects are tied to a particular class, and
020     * don't compare well with other otherwise identical Methods from other classes or interface;
021     * MethodSignatures are distinct from classes and compare well.
022     * <p>
023     * Because the intended purpose is to compare methods from interfaces (which are always public and
024     * abstract) we don't bother to actually track the modifiers. In addition, at this time,
025     * MethodSignature <em>does not distinguish between instance and static
026     * methods</em>.
027     */
028    public interface MethodSignature
029    {
030        /**
031         * Returns the exceptions for this method. Caution: do not modify the returned array. May return
032         * null.
033         */
034        Class[] getExceptionTypes();
035        
036        /**
037         * The name of the method.
038         * @return method name
039         */
040        String getName();
041        
042        /**
043         * Returns the parameter types for this method. May return null. Caution: do not modify the
044         * returned array.
045         */
046        Class[] getParameterTypes();
047        
048        /**
049         * Method return type.
050         * 
051         * @return The return type of the method.
052         */
053        Class getReturnType();
054        
055        /**
056         * Returns a string consisting of the name of the method and its parameter values. This is
057         * similar to {@link #toString()}, but omits the return type and information about thrown
058         * exceptions. A unique id is used by  MethodIterator to identify overlapping methods
059         * (methods with the same name but different thrown exceptions).
060         * 
061         */
062        String getUniqueId();
063        
064        /**
065         * Returns true if this signature has the same return type, name and parameters types as the
066         * method signature passed in, and this signatures exceptions "trump" (are the same as, or
067         * super-implementations of, all exceptions thrown by the other method signature).
068         * 
069         */
070    
071        boolean isOverridingSignatureOf(MethodSignature ms);
072        
073        /**
074         * If the method definition has generic parameters or return types it
075         * is expected that this will return true.
076         * 
077         * @return True if this is a generics based method, false otherwise.
078         */
079        boolean isGeneric();
080    }