CallbackFilter.java revision 674060f01e9090cd21b3c5656cc3204912ad17a6
183c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek/*
2eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek * Copyright 2003,2004 The Apache Software Foundation
3eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek *
4eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek *  Licensed under the Apache License, Version 2.0 (the "License");
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * you may not use this file except in compliance with the License.
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * You may obtain a copy of the License at
7eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek *
8eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek *      http://www.apache.org/licenses/LICENSE-2.0
9eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek *
1083c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek *  Unless required by applicable law or agreed to in writing, software
1183c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek * distributed under the License is distributed on an "AS IS" BASIS,
12eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek * See the License for the specific language governing permissions and
14eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek * limitations under the License.
1583c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenek */
1683c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenekpackage org.mockito.cglib.proxy;
17eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek
1805e14cd46ef44c07385aae96ec2fdcb9bf7e9467Ted Kremenekimport java.lang.reflect.Method;
19eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenekimport java.util.List;
204c3fbe33194cd9b1bfff773647ed785b403e1ba5Ted Kremenek
215226755ab5ce6346f98b5f41cdcffbe84c5bb484Ted Kremenek/**
224c3fbe33194cd9b1bfff773647ed785b403e1ba5Ted Kremenek * Map methods of subclasses generated by {@link Enhancer} to a particular
2359753441b6391a9843eff287f0adb2614153b7c8Ted Kremenek * callback. The type of the callbacks chosen for each method affects
24eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek * the bytecode generated for that method in the subclass, and cannot
25eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek * change for the life of the class.
2605e14cd46ef44c07385aae96ec2fdcb9bf7e9467Ted Kremenek */
2783c01da96f57cf732a5da9a83e2981241f205dc4Ted Kremenekpublic interface CallbackFilter {
28eb19188e668d0ad2c968fc0286a6922f9194deb4Ted Kremenek    /**
29f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * Map a method to a callback.
30f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     *
31f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * @param method the intercepted method
3282bae3f6bf7bc4733d9c87659b266e23ad55f420Ted Kremenek     * @param allMethods all the methods found on the instance. Don't mess with the contents of this list!!!
33f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * @return the index into the array of callbacks (as specified by {@link Enhancer#setCallbacks}) to use for the method,
34f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     */
35f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek    int accept(Method method, List<Method> allMethods);
36f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek
37f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek    /**
38f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * The <code>CallbackFilter</code> in use affects which cached class
39f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * the <code>Enhancer</code> will use, so this is a reminder that
40f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * you should correctly implement <code>equals</code> and
41f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek     * <code>hashCode</code> for custom <code>CallbackFilter</code>
427090d5465de7ca620da16211cf886edf1edc1f1fTed Kremenek     * implementations in order to improve performance.
43f4be8ee748831bc23e35b542e6c1bb6d1eb49baaTed Kremenek    */
447090d5465de7ca620da16211cf886edf1edc1f1fTed Kremenek    boolean equals(Object o);
454c3fbe33194cd9b1bfff773647ed785b403e1ba5Ted Kremenek}
46d452758bb6b59340528a26def9ecc24b329d4ecfTed Kremenek