1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2002,2003 The Apache Software Foundation 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Licensed under the Apache License, Version 2.0 (the "License"); 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * you may not use this file except in compliance with the License. 6ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * You may obtain a copy of the License at 7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * 8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * http://www.apache.org/licenses/LICENSE-2.0 9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * 10ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Unless required by applicable law or agreed to in writing, software 11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * distributed under the License is distributed on an "AS IS" BASIS, 12a0b40280a49a8a43af7929ead3b3489951c58501commit-bot@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * See the License for the specific language governing permissions and 14e3beb6bd7de7fa211681abbb0be58e80b19885e0commit-bot@chromium.org * limitations under the License. 15ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 16ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 17ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.compackage org.mockito.cglib.proxy; 18ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 19ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/** 20ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * All enhanced instances returned by the {@link Enhancer} class implement this interface. 21ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Using this interface for new instances is faster than going through the <code>Enhancer</code> 22c377baf406996aed18d82d328029c82dbc3b8ddatomhudson@google.com * interface or using reflection. In addition, to intercept methods called during 23ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * object construction you <b>must</b> use these methods instead of reflection. 24ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">baliuka@mwm.lt</a> 25ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @version $Id: Factory.java,v 1.13 2004/06/24 21:15:20 herbyderby Exp $ 26ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 27ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.compublic interface Factory { 28ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com /** 29ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Creates new instance of the same type, using the no-arg constructor. 30ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * The class of this object must have been created using a single Callback type. 31ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * If multiple callbacks are required an exception will be thrown. 32d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com * @param callback the new interceptor to use 33ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @return new instance of the same type 34939ca7ce860c5e80a4fdccc0dba5f7bfa29fef22reed@google.com */ 35ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com Object newInstance(Callback callback); 36ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 37d537341e16524d1e22ac5e6c8b9c8f274ba1833crobertphillips /** 38ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Creates new instance of the same type, using the no-arg constructor. 39ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param callbacks the new callbacks(s) to use 40ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @return new instance of the same type 41ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 42ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com Object newInstance(Callback[] callbacks); 43ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 44ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com /** 45ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Creates a new instance of the same type, using the constructor 46ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * matching the given signature. 47ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param types the constructor argument types 48ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param args the constructor arguments 49ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param callbacks the new interceptor(s) to use 50ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @return new instance of the same type 51ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 52ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com Object newInstance(Class[] types, Object[] args, Callback[] callbacks); 53f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org 54f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org /** 55ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Return the <code>Callback</code> implementation at the specified index. 56ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param index the callback index 57ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @return the callback implementation 58ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 59f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org Callback getCallback(int index); 60f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org 61ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com /** 62ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Set the callback for this object for the given type. 63ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param index the callback index to replace 64ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * @param callback the new callback 65ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 66ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com void setCallback(int index, Callback callback); 67ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 68ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com /** 69ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * Replace all of the callbacks for this object at once. 70d537341e16524d1e22ac5e6c8b9c8f274ba1833crobertphillips * @param callbacks the new callbacks(s) to use 71ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 72ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com void setCallbacks(Callback[] callbacks); 73ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 74 /** 75 * Get the current set of callbacks for ths object. 76 * @return a new array instance 77 */ 78 Callback[] getCallbacks(); 79} 80