[Proxool-cvs] proxool/src/java/org/logicalcobwebs/cglib/proxy CallbackFilter.java,1.2,1.3 CallbackGe
UNMAINTAINED!
Brought to you by:
billhorsman
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18037/src/java/org/logicalcobwebs/cglib/proxy Modified Files: CallbackFilter.java CallbackGenerator.java Enhancer.java EnhancerEmitter.java MethodProxy.java NoOp.java Log Message: Updated cglib code. Index: CallbackFilter.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy/CallbackFilter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CallbackFilter.java 17 Dec 2003 21:10:35 -0000 1.2 --- CallbackFilter.java 2 Jun 2004 20:41:53 -0000 1.3 *************** *** 64,71 **** public interface CallbackFilter { /** * Map a method to a callback. * @param method the intercepted method ! * @return the index into the array of callbacks (as specified by {@link Enhancer#setCallbacks}) to use for the method, */ int accept(Method method); --- 64,86 ---- public interface CallbackFilter { + static final CallbackFilter ALL_ZERO = new CallbackFilter() { + public int accept(Method method) { + return 0; + } + + public String toString() { + return "ALL_ZERO"; + } + + public int hashCode() { + return 999; + } + }; + /** * Map a method to a callback. + * * @param method the intercepted method ! * @return the index into the array of callbacks (as specified by {@link Enhancer#setCallbacks}) to use for the method, */ int accept(Method method); *************** *** 77,81 **** * <code>hashCode</code> for custom <code>CallbackFilter</code> * implementations in order to improve performance. ! */ boolean equals(Object o); } --- 92,96 ---- * <code>hashCode</code> for custom <code>CallbackFilter</code> * implementations in order to improve performance. ! */ boolean equals(Object o); } Index: CallbackGenerator.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy/CallbackGenerator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CallbackGenerator.java 17 Dec 2003 21:10:35 -0000 1.2 --- CallbackGenerator.java 2 Jun 2004 20:41:54 -0000 1.3 *************** *** 56,65 **** import org.logicalcobwebs.cglib.core.ClassEmitter; import org.logicalcobwebs.cglib.core.CodeEmitter; - import org.logicalcobwebs.cglib.core.Context; ! interface CallbackGenerator ! { void generate(ClassEmitter e, Context context) throws Exception; void generateStatic(CodeEmitter e, Context context) throws Exception; } --- 56,81 ---- import org.logicalcobwebs.cglib.core.ClassEmitter; import org.logicalcobwebs.cglib.core.CodeEmitter; ! import java.lang.reflect.Method; ! import java.util.Iterator; ! ! interface CallbackGenerator { ! void generate(ClassEmitter e, Context context) throws Exception; + void generateStatic(CodeEmitter e, Context context) throws Exception; + interface Context { + + Iterator getMethods(); + + int getIndex(Method method); + + void emitCallback(CodeEmitter e, int index); + + int getModifiers(Method method); + + String getUniqueName(Method method); + } + } Index: Enhancer.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy/Enhancer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Enhancer.java 17 Dec 2003 21:10:35 -0000 1.2 --- Enhancer.java 2 Jun 2004 20:41:54 -0000 1.3 *************** *** 94,109 **** { - static final CallbackFilter ALL_ZERO = new CallbackFilter() { - public int accept(Method method) { - return 0; - } - public String toString() { - return "ALL_ZERO"; - } - public int hashCode() { - return 999; - } - }; - private static final Source SOURCE = new Source(Enhancer.class.getName()); private static final EnhancerKey KEY_FACTORY = --- 94,97 ---- *************** *** 332,336 **** throw new IllegalStateException("Multiple callback types possible but no filter specified"); } ! filter = ALL_ZERO; } --- 320,324 ---- throw new IllegalStateException("Multiple callback types possible but no filter specified"); } ! filter = CallbackFilter.ALL_ZERO; } Index: EnhancerEmitter.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy/EnhancerEmitter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** EnhancerEmitter.java 17 Dec 2003 21:10:35 -0000 1.2 --- EnhancerEmitter.java 2 Jun 2004 20:41:54 -0000 1.3 *************** *** 403,407 **** seenGen.add(gen); final List fmethods = (List)groups.get(gen); ! Context context = new Context() { public Iterator getMethods() { return fmethods.iterator(); --- 403,407 ---- seenGen.add(gen); final List fmethods = (List)groups.get(gen); ! CallbackGenerator.Context context = new CallbackGenerator.Context() { public Iterator getMethods() { return fmethods.iterator(); Index: MethodProxy.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy/MethodProxy.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** MethodProxy.java 17 Dec 2003 21:10:35 -0000 1.2 --- MethodProxy.java 2 Jun 2004 20:41:54 -0000 1.3 *************** *** 81,84 **** --- 81,123 ---- /** + * For internal use by {@link Enhancer} only; see the {@link net.sf.cglib.reflect.FastMethod} class + * for similar functionality. + */ + public static MethodProxy create(ClassLoader loader, Class c1, Class c2, String desc, String name1, String name2) { + final Signature sig1 = new Signature(name1, desc); + Signature sig2 = new Signature(name2, desc); + FastClass f1 = helper(loader, c1); + FastClass f2 = helper(loader, c2); + int i1 = f1.getIndex(sig1); + int i2 = f2.getIndex(sig2); + + MethodProxy proxy; + if (i1 < 0) { + proxy = new MethodProxy() { + public Object invoke(Object obj, Object[] args) throws Throwable { + throw new IllegalArgumentException("Protected method: " + sig1); + } + }; + } else { + proxy = new MethodProxy(); + } + + proxy.f1 = f1; + proxy.f2 = f2; + proxy.i1 = i1; + proxy.i2 = i2; + proxy.sig = sig1; + proxy.superName = name2; + return proxy; + } + + private static FastClass helper(ClassLoader loader, Class type) { + FastClass.Generator g = new FastClass.Generator(); + g.setType(type); + g.setClassLoader(loader); + return g.create(); + } + + /** * Return the signature of the proxied method. */ Index: NoOp.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/cglib/proxy/NoOp.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** NoOp.java 17 Dec 2003 21:10:35 -0000 1.2 --- NoOp.java 2 Jun 2004 20:41:54 -0000 1.3 *************** *** 60,62 **** --- 60,66 ---- public interface NoOp extends Callback { + /** + * A thread-safe singleton instance of the <code>NoOp</code> callback. + */ + public static final NoOp INSTANCE = new NoOp() { }; } |