You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jc...@apache.org on 2008/04/06 14:35:33 UTC

svn commit: r645232 - in /commons/proper/proxy/branches/version-2.0-work: ./ src/main/java/org/apache/commons/proxy/ src/main/java/org/apache/commons/proxy/factory/cglib/ src/main/java/org/apache/commons/proxy/factory/javassist/ src/main/java/org/apach...

Author: jcarman
Date: Sun Apr  6 05:35:32 2008
New Revision: 645232

URL: http://svn.apache.org/viewvc?rev=645232&view=rev
Log:
Genericizing Proxy.

Modified:
    commons/proper/proxy/branches/version-2.0-work/pom.xml
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ObjectProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ProxyFactory.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/BeanProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/CloningProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ConstantProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/NullProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ProviderDecorator.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/SingletonProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/BurlapProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/HessianProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java
    commons/proper/proxy/branches/version-2.0-work/src/test/java/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java

Modified: commons/proper/proxy/branches/version-2.0-work/pom.xml
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/pom.xml?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/pom.xml (original)
+++ commons/proper/proxy/branches/version-2.0-work/pom.xml Sun Apr  6 05:35:32 2008
@@ -26,7 +26,7 @@
         <version>9</version>
     </parent>
     <artifactId>commons-proxy</artifactId>
-    <version>1.1-SNAPSHOT</version>
+    <version>2.0-SNAPSHOT</version>
     <name>Commons Proxy</name>
     <description>Java library for dynamic proxying</description>
     <url>http://commons.apache.org/proxy/</url>
@@ -241,8 +241,8 @@
     </distributionManagement>
 
     <properties>
-        <maven.compile.source>1.4</maven.compile.source>
-        <maven.compile.target>1.4</maven.compile.target>
+        <maven.compile.source>1.5</maven.compile.source>
+        <maven.compile.target>1.5</maven.compile.target>
         <commons.componentid>proxy</commons.componentid>
         <commons.release.version>1.0</commons.release.version>
         <commons.binary.suffix></commons.binary.suffix>

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ObjectProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ObjectProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ObjectProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ObjectProvider.java Sun Apr  6 05:35:32 2008
@@ -23,7 +23,7 @@
  * @author James Carman
  * @since 1.0
  */
-public interface ObjectProvider
+public interface ObjectProvider<T>
 {
 //**********************************************************************************************************************
 // Other Methods
@@ -36,6 +36,6 @@
      *
      * @return the object on which the method should be called
      */
-    public Object getObject();
+    public T getObject();
 }
 

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ProxyFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ProxyFactory.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ProxyFactory.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/ProxyFactory.java Sun Apr  6 05:35:32 2008
@@ -58,12 +58,11 @@
      * @param proxyClasses the proxy classes
      * @return true if all <code>proxyClasses</code> are interfaces
      */
-    public boolean canProxy(Class[] proxyClasses)
+    public boolean canProxy( Class... proxyClasses )
     {
-        for (int i = 0; i < proxyClasses.length; i++)
+        for( Class proxyClass : proxyClasses )
         {
-            Class proxyClass = proxyClasses[i];
-            if (!proxyClass.isInterface())
+            if( !proxyClass.isInterface() )
             {
                 return false;
             }
@@ -79,12 +78,26 @@
      * @param proxyClasses     the interfaces that the proxy should implement
      * @return a proxy which delegates to the object provided by the target object provider
      */
-    public Object createDelegatorProxy(ObjectProvider delegateProvider, Class[] proxyClasses)
+    public Object createDelegatorProxy( ObjectProvider delegateProvider, Class... proxyClasses )
     {
         return createDelegatorProxy(Thread.currentThread().getContextClassLoader(), delegateProvider, proxyClasses);
     }
 
     /**
+     * Creates a proxy which delegates to the object provided by <code>delegateProvider</code>.  The proxy will be
+     * generated using the current thread's "context class loader."
+     *
+     * @param delegateProvider the delegate provider
+     * @param proxyClass     the class/interface that the proxy should implement
+     * @return a proxy which delegates to the object provided by the target object provider
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T createDelegatorProxy( ObjectProvider<T> delegateProvider, Class<T> proxyClass )
+    {
+        return (T)createDelegatorProxy(delegateProvider, new Class[] {proxyClass});
+    }
+
+    /**
      * Creates a proxy which delegates to the object provided by <code>delegateProvider</code>.
      *
      * @param classLoader      the class loader to use when generating the proxy
@@ -92,11 +105,26 @@
      * @param proxyClasses     the interfaces that the proxy should implement
      * @return a proxy which delegates to the object provided by the target <code>delegateProvider>
      */
-    public Object createDelegatorProxy(ClassLoader classLoader, ObjectProvider delegateProvider,
-                                       Class[] proxyClasses)
+    public Object createDelegatorProxy( ClassLoader classLoader, ObjectProvider delegateProvider,
+                                        Class... proxyClasses )
     {
         return Proxy.newProxyInstance(classLoader, proxyClasses,
-                new DelegatorInvocationHandler(delegateProvider));
+                                      new DelegatorInvocationHandler(delegateProvider));
+    }
+
+    /**
+     * Creates a proxy which delegates to the object provided by <code>delegateProvider</code>.
+     *
+     * @param classLoader      the class loader to use when generating the proxy
+     * @param delegateProvider the delegate provider
+     * @param proxyClass     the class/interface that the proxy should implement
+     * @return a proxy which delegates to the object provided by the target <code>delegateProvider>
+     */
+    @SuppressWarnings( "unchecked" )
+    public <T> T createDelegatorProxy( ClassLoader classLoader, ObjectProvider<T> delegateProvider,
+                                       Class<T> proxyClass )
+    {
+        return ( T ) createDelegatorProxy(classLoader, delegateProvider, new Class[] {proxyClass});
     }
 
     /**
@@ -109,11 +137,28 @@
      * @return a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
      *         <code>target</code> object.
      */
-    public Object createInterceptorProxy(Object target, Interceptor interceptor,
-                                         Class[] proxyClasses)
+    public Object createInterceptorProxy( Object target, Interceptor interceptor,
+                                          Class... proxyClasses )
     {
         return createInterceptorProxy(Thread.currentThread().getContextClassLoader(), target, interceptor,
-                proxyClasses);
+                                      proxyClasses);
+    }
+
+    /**
+     * Creates a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
+     * <code>target</code> object.  The proxy will be generated using the current thread's "context class loader."
+     *
+     * @param target       the target object
+     * @param interceptor  the method interceptor
+     * @param proxyClass the class/interface that the proxy should implement
+     * @return a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
+     *         <code>target</code> object.
+     */
+    @SuppressWarnings( "unchecked" )
+    public <T> T createInterceptorProxy( Object target, Interceptor interceptor,
+                                         Class<T> proxyClass )
+    {
+        return ( T ) createInterceptorProxy(target, interceptor, new Class[] {proxyClass});
     }
 
     /**
@@ -127,14 +172,34 @@
      * @return a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
      *         <code>target</code> object.
      */
-    public Object createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor,
-                                         Class[] proxyClasses)
+    public Object createInterceptorProxy( ClassLoader classLoader, Object target, Interceptor interceptor,
+                                          Class... proxyClasses )
     {
         return Proxy
                 .newProxyInstance(classLoader, proxyClasses, new InterceptorInvocationHandler(target, interceptor));
     }
 
     /**
+     * Creates a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
+     * <code>target</code> object.
+     *
+     * @param classLoader  the class loader to use when generating the proxy
+     * @param target       the target object
+     * @param interceptor  the method interceptor
+     * @param proxyClass the class/interface that the proxy should implement.
+     * @return a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
+     *         <code>target</code> object.
+     */
+    @SuppressWarnings( "unchecked" )
+    public <T> T createInterceptorProxy( ClassLoader classLoader,
+                                         Object target,
+                                         Interceptor interceptor,
+                                         Class<T> proxyClass )
+    {
+        return ( T ) createInterceptorProxy(classLoader, target, interceptor, new Class[] {proxyClass});
+    }
+
+    /**
      * Creates a proxy which uses the provided {@link Invoker} to handle all method invocations.  The proxy will be
      * generated using the current thread's "context class loader."
      *
@@ -142,10 +207,24 @@
      * @param proxyClasses the interfaces that the proxy should implement
      * @return a proxy which uses the provided {@link Invoker} to handle all method invocations
      */
-    public Object createInvokerProxy(Invoker invoker, Class[] proxyClasses)
+    public Object createInvokerProxy( Invoker invoker, Class... proxyClasses )
     {
         return createInvokerProxy(Thread.currentThread().getContextClassLoader(), invoker,
-                proxyClasses);
+                                  proxyClasses);
+    }
+
+    /**
+     * Creates a proxy which uses the provided {@link Invoker} to handle all method invocations.  The proxy will be
+     * generated using the current thread's "context class loader."
+     *
+     * @param invoker      the invoker
+     * @param proxyClass the class/interface that the proxy should implement
+     * @return a proxy which uses the provided {@link Invoker} to handle all method invocations
+     */
+    @SuppressWarnings( "unchecked" )
+    public <T> T createInvokerProxy( Invoker invoker, Class<T> proxyClass )
+    {
+        return ( T ) createInvokerProxy(invoker, new Class[] {proxyClass});
     }
 
     /**
@@ -156,12 +235,27 @@
      * @param proxyClasses the interfaces that the proxy should implement
      * @return a proxy which uses the provided {@link Invoker} to handle all method invocations
      */
-    public Object createInvokerProxy(ClassLoader classLoader, Invoker invoker,
-                                     Class[] proxyClasses)
+    public Object createInvokerProxy( ClassLoader classLoader, Invoker invoker,
+                                      Class... proxyClasses )
     {
         return Proxy.newProxyInstance(classLoader, proxyClasses, new InvokerInvocationHandler(invoker));
     }
 
+    /**
+     * Creates a proxy which uses the provided {@link Invoker} to handle all method invocations.
+     *
+     * @param classLoader  the class loader to use when generating the proxy
+     * @param invoker      the invoker
+     * @param proxyClass the class/interface that the proxy should implement
+     * @return a proxy which uses the provided {@link Invoker} to handle all method invocations
+     */
+    @SuppressWarnings( "unchecked" )
+    public <T> T createInvokerProxy( ClassLoader classLoader, Invoker invoker,
+                                     Class<T> proxyClass )
+    {
+        return ( T ) createInvokerProxy(classLoader, invoker, new Class[] {proxyClass});
+    }
+
 //**********************************************************************************************************************
 // Inner Classes
 //**********************************************************************************************************************
@@ -170,18 +264,18 @@
     {
         private final ObjectProvider delegateProvider;
 
-        protected DelegatorInvocationHandler(ObjectProvider delegateProvider)
+        protected DelegatorInvocationHandler( ObjectProvider delegateProvider )
         {
             this.delegateProvider = delegateProvider;
         }
 
-        public Object invokeImpl(Object proxy, Method method, Object[] args) throws Throwable
+        public Object invokeImpl( Object proxy, Method method, Object[] args ) throws Throwable
         {
             try
             {
                 return method.invoke(delegateProvider.getObject(), args);
             }
-            catch (InvocationTargetException e)
+            catch( InvocationTargetException e )
             {
                 throw e.getTargetException();
             }
@@ -193,13 +287,13 @@
         private final Object target;
         private final Interceptor methodInterceptor;
 
-        public InterceptorInvocationHandler(Object target, Interceptor methodInterceptor)
+        public InterceptorInvocationHandler( Object target, Interceptor methodInterceptor )
         {
             this.target = target;
             this.methodInterceptor = methodInterceptor;
         }
 
-        public Object invokeImpl(Object proxy, Method method, Object[] args) throws Throwable
+        public Object invokeImpl( Object proxy, Method method, Object[] args ) throws Throwable
         {
             final ReflectionInvocation invocation = new ReflectionInvocation(target, method, args);
             return methodInterceptor.intercept(invocation);
@@ -208,15 +302,15 @@
 
     private abstract static class AbstractInvocationHandler implements InvocationHandler, Serializable
     {
-        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+        public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
         {
-            if (isHashCode(method))
+            if( isHashCode(method) )
             {
-                return new Integer(System.identityHashCode(proxy));
+                return System.identityHashCode(proxy);
             }
-            else if (isEqualsMethod(method))
+            else if( isEqualsMethod(method) )
             {
-                return Boolean.valueOf(proxy == args[0]);
+                return proxy == args[0];
             }
             else
             {
@@ -224,32 +318,32 @@
             }
         }
 
-        protected abstract Object invokeImpl(Object proxy, Method method, Object[] args) throws Throwable;
+        protected abstract Object invokeImpl( Object proxy, Method method, Object[] args ) throws Throwable;
     }
 
     private static class InvokerInvocationHandler extends AbstractInvocationHandler
     {
         private final Invoker invoker;
 
-        public InvokerInvocationHandler(Invoker invoker)
+        public InvokerInvocationHandler( Invoker invoker )
         {
             this.invoker = invoker;
         }
 
-        public Object invokeImpl(Object proxy, Method method, Object[] args) throws Throwable
+        public Object invokeImpl( Object proxy, Method method, Object[] args ) throws Throwable
         {
             return invoker.invoke(proxy, method, args);
         }
     }
 
-    protected static boolean isHashCode(Method method)
+    protected static boolean isHashCode( Method method )
     {
         return "hashCode".equals(method.getName()) &&
                 Integer.TYPE.equals(method.getReturnType()) &&
                 method.getParameterTypes().length == 0;
     }
 
-    protected static boolean isEqualsMethod(Method method)
+    protected static boolean isEqualsMethod( Method method )
     {
         return "equals".equals(method.getName()) &&
                 Boolean.TYPE.equals(method.getReturnType()) &&
@@ -263,10 +357,10 @@
         private final Object[] arguments;
         private final Object target;
 
-        public ReflectionInvocation(Object target, Method method, Object[] arguments)
+        public ReflectionInvocation( Object target, Method method, Object[] arguments )
         {
             this.method = method;
-            this.arguments = (arguments == null ? ProxyUtils.EMPTY_ARGUMENTS : arguments);
+            this.arguments = ( arguments == null ? ProxyUtils.EMPTY_ARGUMENTS : arguments );
             this.target = target;
         }
 
@@ -291,7 +385,7 @@
             {
                 return method.invoke(target, arguments);
             }
-            catch (InvocationTargetException e)
+            catch( InvocationTargetException e )
             {
                 throw e.getTargetException();
             }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java Sun Apr  6 05:35:32 2008
@@ -55,7 +55,7 @@
 //**********************************************************************************************************************
 
     public Object createDelegatorProxy(ClassLoader classLoader, ObjectProvider targetProvider,
-                                       Class[] proxyClasses)
+                                       Class... proxyClasses)
     {
         final Enhancer enhancer = new Enhancer();
         enhancer.setClassLoader(classLoader);
@@ -67,7 +67,7 @@
     }
 
     public Object createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor,
-                                         Class[] proxyClasses)
+                                         Class... proxyClasses)
     {
         final Enhancer enhancer = new Enhancer();
         enhancer.setClassLoader(classLoader);
@@ -79,7 +79,7 @@
     }
 
     public Object createInvokerProxy(ClassLoader classLoader, Invoker invoker,
-                                     Class[] proxyClasses)
+                                     Class... proxyClasses)
     {
         final Enhancer enhancer = new Enhancer();
         enhancer.setClassLoader(classLoader);
@@ -115,7 +115,7 @@
     {
         public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable
         {
-            return new Integer(System.identityHashCode(o));
+            return System.identityHashCode(o);
         }
     }
 
@@ -123,7 +123,7 @@
     {
         public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable
         {
-            return Boolean.valueOf(o == objects[0]);
+            return o == objects[0];
         }
     }
 

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java Sun Apr  6 05:35:32 2008
@@ -74,13 +74,13 @@
 //**********************************************************************************************************************
 
     public Object createDelegatorProxy(ClassLoader classLoader, ObjectProvider targetProvider,
-                                       Class[] proxyClasses)
+                                       Class... proxyClasses)
     {
         try
         {
             final Class clazz = delegatingProxyClassCache.getProxyClass(classLoader, proxyClasses);
-            return clazz.getConstructor(new Class[]{ObjectProvider.class})
-                    .newInstance(new Object[]{targetProvider});
+            return clazz.getConstructor(ObjectProvider.class)
+                    .newInstance(targetProvider);
         }
         catch (Exception e)
         {
@@ -89,13 +89,13 @@
     }
 
     public Object createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor,
-                                         Class[] proxyClasses)
+                                         Class... proxyClasses)
     {
         try
         {
             final Class clazz = interceptorProxyClassCache.getProxyClass(classLoader, proxyClasses);
-            return clazz.getConstructor(new Class[]{Object.class, Interceptor.class})
-                    .newInstance(new Object[]{target, interceptor});
+            return clazz.getConstructor(Object.class, Interceptor.class)
+                    .newInstance(target, interceptor);
         }
         catch (Exception e)
         {
@@ -104,13 +104,13 @@
     }
 
     public Object createInvokerProxy(ClassLoader classLoader, Invoker invoker,
-                                     Class[] proxyClasses)
+                                     Class... proxyClasses)
     {
         try
         {
             final Class clazz = invocationHandlerProxyClassCache.getProxyClass(classLoader, proxyClasses);
-            return clazz.getConstructor(new Class[]{Invoker.class})
-                    .newInstance(new Object[]{invoker});
+            return clazz.getConstructor(Invoker.class)
+                    .newInstance(invoker);
         }
         catch (Exception e)
         {

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java Sun Apr  6 05:35:32 2008
@@ -153,7 +153,7 @@
      * @param proxyClasses the proxy classes
      * @return true if a suitable superclass can be found, given the desired <code>proxyClasses</code>
      */
-    public boolean canProxy( Class[] proxyClasses )
+    public boolean canProxy( Class... proxyClasses )
     {
         try
         {

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/BeanProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/BeanProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/BeanProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/BeanProvider.java Sun Apr  6 05:35:32 2008
@@ -28,13 +28,13 @@
  * @author James Carman
  * @since 1.0
  */
-public class BeanProvider implements ObjectProvider, Serializable
+public class BeanProvider<T> implements ObjectProvider<T>, Serializable
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private Class beanClass;
+    private Class<T> beanClass;
 
 //**********************************************************************************************************************
 // Constructors
@@ -49,7 +49,7 @@
      *
      * @param beanClass the bean class
      */
-    public BeanProvider( Class beanClass )
+    public BeanProvider( Class<T> beanClass )
     {
         this.beanClass = beanClass;
     }
@@ -58,7 +58,7 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    public T getObject()
     {
         try
         {
@@ -83,7 +83,7 @@
 // Getter/Setter Methods
 //**********************************************************************************************************************
 
-    public void setBeanClass( Class beanClass )
+    public void setBeanClass( Class<T> beanClass )
     {
         this.beanClass = beanClass;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/CloningProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/CloningProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/CloningProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/CloningProvider.java Sun Apr  6 05:35:32 2008
@@ -31,13 +31,13 @@
  * @author James Carman
  * @since 1.0
  */
-public class CloningProvider implements ObjectProvider, Serializable
+public class CloningProvider<T extends Cloneable> implements ObjectProvider<T>, Serializable
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private final Cloneable cloneable;
+    private final T cloneable;
     private Method cloneMethod;
 
 //**********************************************************************************************************************
@@ -50,7 +50,7 @@
      *
      * @param cloneable the object to clone
      */
-    public CloningProvider( Cloneable cloneable )
+    public CloningProvider( T cloneable )
     {
         this.cloneable = cloneable;
     }
@@ -59,12 +59,12 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-
-    public Object getObject()
+    @SuppressWarnings("unchecked")
+    public T getObject()
     {
         try
         {
-            return getCloneMethod().invoke(cloneable, ProxyUtils.EMPTY_ARGUMENTS);
+            return (T)getCloneMethod().invoke(cloneable, ProxyUtils.EMPTY_ARGUMENTS);
         }
         catch( IllegalAccessException e )
         {

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ConstantProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ConstantProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ConstantProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ConstantProvider.java Sun Apr  6 05:35:32 2008
@@ -27,19 +27,19 @@
  * @author James Carman
  * @since 1.0
  */
-public class ConstantProvider implements ObjectProvider, Serializable
+public class ConstantProvider<T> implements ObjectProvider<T>, Serializable
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private final Object constant;
+    private final T constant;
 
 //**********************************************************************************************************************
 // Constructors
 //**********************************************************************************************************************
 
-    public ConstantProvider( Object constant )
+    public ConstantProvider( T constant )
     {
         this.constant = constant;
     }
@@ -48,7 +48,7 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    public T getObject()
     {
         return constant;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/NullProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/NullProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/NullProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/NullProvider.java Sun Apr  6 05:35:32 2008
@@ -23,7 +23,7 @@
  * @author James Carman
  * @since 1.0
  */
-public class NullProvider extends ConstantProvider
+public class NullProvider<T> extends ConstantProvider<T>
 {
 //**********************************************************************************************************************
 // Constructors

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ProviderDecorator.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ProviderDecorator.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ProviderDecorator.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/ProviderDecorator.java Sun Apr  6 05:35:32 2008
@@ -27,19 +27,19 @@
  * @author James Carman
  * @since 1.0
  */
-public class ProviderDecorator implements ObjectProvider
+public class ProviderDecorator<T> implements ObjectProvider<T>
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    protected ObjectProvider inner;
+    protected ObjectProvider<T> inner;
 
 //**********************************************************************************************************************
 // Constructors
 //**********************************************************************************************************************
 
-    public ProviderDecorator( ObjectProvider inner )
+    public ProviderDecorator( ObjectProvider<T> inner )
     {
         this.inner = inner;
     }
@@ -48,7 +48,7 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    public T getObject()
     {
         return inner.getObject();
     }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/SingletonProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/SingletonProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/SingletonProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/SingletonProvider.java Sun Apr  6 05:35:32 2008
@@ -26,19 +26,19 @@
  * @author James Carman
  * @since 1.0
  */
-public class SingletonProvider extends ProviderDecorator
+public class SingletonProvider<T> extends ProviderDecorator<T>
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private Object instance;
+    private T instance;
 
 //**********************************************************************************************************************
 // Constructors
 //**********************************************************************************************************************
 
-    public SingletonProvider( ObjectProvider inner )
+    public SingletonProvider( ObjectProvider<T> inner )
     {
         super(inner);
     }
@@ -47,7 +47,7 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    public T getObject()
     {
         synchronized( this )
         {

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/BurlapProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/BurlapProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/BurlapProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/BurlapProvider.java Sun Apr  6 05:35:32 2008
@@ -37,13 +37,13 @@
  * @author James Carman
  * @since 1.0
  */
-public class BurlapProvider implements ObjectProvider, Serializable
+public class BurlapProvider<T> implements ObjectProvider<T>, Serializable
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private Class serviceInterface;
+    private Class<T> serviceInterface;
     private String url;
 
 //**********************************************************************************************************************
@@ -54,7 +54,7 @@
     {
     }
 
-    public BurlapProvider( Class serviceInterface, String url )
+    public BurlapProvider( Class<T> serviceInterface, String url )
     {
         this.serviceInterface = serviceInterface;
         this.url = url;
@@ -64,11 +64,12 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    @SuppressWarnings("unchecked")
+    public T getObject()
     {
         try
         {
-            return new BurlapProxyFactory().create(serviceInterface, url);
+            return (T)new BurlapProxyFactory().create(serviceInterface, url);
         }
         catch( MalformedURLException e )
         {
@@ -80,7 +81,7 @@
 // Getter/Setter Methods
 //**********************************************************************************************************************
 
-    public void setServiceInterface( Class serviceInterface )
+    public void setServiceInterface( Class<T> serviceInterface )
     {
         this.serviceInterface = serviceInterface;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/HessianProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/HessianProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/HessianProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/HessianProvider.java Sun Apr  6 05:35:32 2008
@@ -37,13 +37,13 @@
  * @author James Carman
  * @since 1.0
  */
-public class HessianProvider implements ObjectProvider, Serializable
+public class HessianProvider<T> implements ObjectProvider<T>, Serializable
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private Class serviceInterface;
+    private Class<T> serviceInterface;
     private String url;
 
 //**********************************************************************************************************************
@@ -54,7 +54,7 @@
     {
     }
 
-    public HessianProvider( Class serviceInterface, String url )
+    public HessianProvider( Class<T> serviceInterface, String url )
     {
         this.serviceInterface = serviceInterface;
         this.url = url;
@@ -64,11 +64,12 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    @SuppressWarnings("unchecked")
+    public T getObject()
     {
         try
         {
-            return new HessianProxyFactory().create(serviceInterface, url);
+            return (T)new HessianProxyFactory().create(serviceInterface, url);
         }
         catch( MalformedURLException e )
         {
@@ -80,7 +81,7 @@
 // Getter/Setter Methods
 //**********************************************************************************************************************
 
-    public void setServiceInterface( Class serviceInterface )
+    public void setServiceInterface( Class<T> serviceInterface )
     {
         this.serviceInterface = serviceInterface;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java Sun Apr  6 05:35:32 2008
@@ -40,13 +40,13 @@
  * @author James Carman
  * @since 1.0
  */
-public class JaxRpcProvider implements ObjectProvider
+public class JaxRpcProvider<T> implements ObjectProvider<T>
 {
 //**********************************************************************************************************************
 // Fields
 //**********************************************************************************************************************
 
-    private Class serviceInterface;
+    private Class<T> serviceInterface;
     private String wsdlUrl;
     private String serviceNamespaceUri;
     private String serviceLocalPart;
@@ -63,7 +63,7 @@
     {
     }
 
-    public JaxRpcProvider( Class serviceInterface )
+    public JaxRpcProvider( Class<T> serviceInterface )
     {
         this.serviceInterface = serviceInterface;
     }
@@ -72,7 +72,7 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    public T getObject()
     {
         try
         {
@@ -80,8 +80,8 @@
                     ServiceFactory.newInstance().createService(getServiceQName()) : ServiceFactory
                     .newInstance().createService(new URL(wsdlUrl), getServiceQName()) );
             final QName portQName = getPortQName();
-            return portQName == null ? service.getPort(serviceInterface) :
-                    service.getPort(portQName, serviceInterface);
+            return serviceInterface.cast(portQName == null ? service.getPort(serviceInterface) :
+                    service.getPort(portQName, serviceInterface));
         }
         catch( ServiceException e )
         {
@@ -112,7 +112,7 @@
         this.portPrefix = portPrefix;
     }
 
-    public void setServiceInterface( Class serviceInterface )
+    public void setServiceInterface( Class<T> serviceInterface )
     {
         this.serviceInterface = serviceInterface;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java Sun Apr  6 05:35:32 2008
@@ -32,7 +32,7 @@
  * @author James Carman
  * @since 1.0
  */
-public class RmiProvider implements ObjectProvider
+public class RmiProvider<T> implements ObjectProvider<T>
 {
 //**********************************************************************************************************************
 // Fields
@@ -81,13 +81,14 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    @SuppressWarnings("unchecked")
+    public T getObject()
     {
-        Registry reg = null;
+        Registry reg;
         try
         {
             reg = getRegistry();
-            return reg.lookup(name);
+            return (T)reg.lookup(name);
         }
         catch( NotBoundException e )
         {

Modified: commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java Sun Apr  6 05:35:32 2008
@@ -35,7 +35,7 @@
  * @author James Carman
  * @since 1.0
  */
-public class SessionBeanProvider implements ObjectProvider
+public class SessionBeanProvider<T> implements ObjectProvider<T>
 {
 //**********************************************************************************************************************
 // Fields
@@ -67,7 +67,8 @@
 // ObjectProvider Implementation
 //**********************************************************************************************************************
 
-    public Object getObject()
+    @SuppressWarnings("unchecked")
+    public T getObject()
     {
         try
         {
@@ -75,7 +76,7 @@
                     new InitialContext(properties);
             Object homeObject = PortableRemoteObject.narrow(initialContext.lookup(jndiName), homeInterface);
             final Method createMethod = homeObject.getClass().getMethod("create", ProxyUtils.EMPTY_ARGUMENT_TYPES);
-            return createMethod.invoke(homeObject, ProxyUtils.EMPTY_ARGUMENTS);
+            return (T)createMethod.invoke(homeObject, ProxyUtils.EMPTY_ARGUMENTS);
         }
         catch( NoSuchMethodException e )
         {

Modified: commons/proper/proxy/branches/version-2.0-work/src/test/java/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/src/test/java/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java?rev=645232&r1=645231&r2=645232&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/src/test/java/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/src/test/java/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java Sun Apr  6 05:35:32 2008
@@ -35,11 +35,11 @@
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
-import java.util.Date;
 
 /**
  * @author James Carman
@@ -87,7 +87,7 @@
 
     public void testDelegatorHashCode() throws Exception
     {
-        final Echo proxy = (Echo) factory.createDelegatorProxy(new ConstantProvider(new EchoImpl()), ECHO_ONLY);
+        final Echo proxy = factory.createDelegatorProxy(new ConstantProvider<Echo>(new EchoImpl()), Echo.class);
         assertEquals(proxy.hashCode(), System.identityHashCode(proxy));
     }
 
@@ -116,9 +116,9 @@
     public void testDelegatorEquals() throws Exception
     {
         final Date date = new Date();
-        final Comparable proxy1 = (Comparable) factory.createDelegatorProxy(new ConstantProvider(date),
+        final Comparable proxy1 = (Comparable) factory.createDelegatorProxy(new ConstantProvider<Date>(date),
                 COMPARABLE_ONLY);
-        final Comparable proxy2 = (Comparable) factory.createDelegatorProxy(new ConstantProvider(date),
+        final Comparable proxy2 = (Comparable) factory.createDelegatorProxy(new ConstantProvider<Date>(date),
                 COMPARABLE_ONLY);
         assertEquals(proxy1, proxy1);
         assertFalse(proxy1.equals(proxy2));
@@ -134,8 +134,8 @@
 
     public void testCanProxy()
     {
-        assertTrue(factory.canProxy(ECHO_ONLY));
-        assertFalse(factory.canProxy(new Class[]{EchoImpl.class}));
+        assertTrue(factory.canProxy(Echo.class));
+        assertFalse(factory.canProxy(EchoImpl.class));
     }
 
     public void testChangingArguments()
@@ -162,24 +162,24 @@
 
     public void testDelegatingProxyClassCaching() throws Exception
     {
-        final Echo proxy1 = (Echo) factory.createDelegatorProxy(new ConstantProvider(new EchoImpl()), ECHO_ONLY);
-        final Echo proxy2 = (Echo) factory.createDelegatorProxy(new ConstantProvider(new EchoImpl()), ECHO_ONLY);
+        final Echo proxy1 = factory.createDelegatorProxy(new ConstantProvider<Echo>(new EchoImpl()), Echo.class);
+        final Echo proxy2 = factory.createDelegatorProxy(new ConstantProvider<Echo>(new EchoImpl()), Echo.class);
         assertNotSame(proxy1, proxy2);
         assertSame(proxy1.getClass(), proxy2.getClass());
     }
 
     public void testDelegatingProxyInterfaceOrder()
     {
-        final Echo echo = (Echo) factory.createDelegatorProxy(createSingletonEcho(), new Class[]{Echo.class, DuplicateEcho.class});
-        final List expected = new LinkedList(Arrays.asList(new Class[]{Echo.class, DuplicateEcho.class}));
-        final List actual = new LinkedList(Arrays.asList(echo.getClass().getInterfaces()));
+        final Echo echo = (Echo) factory.createDelegatorProxy(createSingletonEcho(), Echo.class, DuplicateEcho.class);
+        final List<Class> expected = new LinkedList<Class>(Arrays.asList(Echo.class, DuplicateEcho.class));
+        final List<Class> actual = new LinkedList<Class>(Arrays.asList(echo.getClass().getInterfaces()));
         actual.retainAll(expected);  // Doesn't alter order!
         assertEquals(expected, actual);
     }
 
     public void testDelegatingProxySerializable() throws Exception
     {
-        final Echo proxy = (Echo) factory.createDelegatorProxy(new ConstantProvider(new EchoImpl()), ECHO_ONLY);
+        final Echo proxy = factory.createDelegatorProxy(new ConstantProvider<Echo>(new EchoImpl()), Echo.class);
         assertSerializable(proxy);
     }
 
@@ -223,9 +223,10 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
     public void testInterfaceHierarchies()
     {
-        final SortedSet set = (SortedSet) factory.createDelegatorProxy(new ConstantProvider(new TreeSet()), new Class[]{SortedSet.class});
+        final SortedSet set = factory.createDelegatorProxy(new ConstantProvider<SortedSet>(new TreeSet()), SortedSet.class);
         set.add("Hello");
     }
 
@@ -234,7 +235,7 @@
         final InvokerTester tester = new InvokerTester();
         final Echo echo = (Echo) factory.createInvokerProxy(tester, ECHO_ONLY);
         echo.echoBack("hello");
-        assertEquals(Echo.class.getMethod("echoBack", new Class[]{String.class}), tester.method);
+        assertEquals(Echo.class.getMethod("echoBack", String.class), tester.method);
         assertSame(echo, tester.proxy);
         assertNotNull(tester.args);
         assertEquals(1, tester.args.length);
@@ -260,7 +261,7 @@
         final InterceptorTester tester = new InterceptorTester();
         final EchoImpl target = new EchoImpl();
         final Echo proxy1 = (Echo) factory.createInterceptorProxy(target, tester, ECHO_ONLY);
-        final Echo proxy2 = (Echo) factory.createInterceptorProxy(target, tester, new Class[]{Echo.class, DuplicateEcho.class});
+        final Echo proxy2 = (Echo) factory.createInterceptorProxy(target, tester, Echo.class, DuplicateEcho.class);
         proxy1.echoBack("hello1");
         final Class invocationClass1 = tester.invocationClass;
         proxy2.echoBack("hello2");
@@ -271,9 +272,9 @@
     {
         final InterceptorTester tester = new InterceptorTester();
         final EchoImpl target = new EchoImpl();
-        final Echo proxy = (Echo) factory.createInterceptorProxy(target, tester, new Class[]{Echo.class, DuplicateEcho.class});
+        final Echo proxy = (Echo) factory.createInterceptorProxy(target, tester, Echo.class, DuplicateEcho.class);
         proxy.echoBack("hello");
-        assertEquals(Echo.class.getMethod("echoBack", new Class[]{String.class}), tester.method);
+        assertEquals(Echo.class.getMethod("echoBack", String.class), tester.method);
     }
 
     public void testMethodInvocationImplementation() throws Exception
@@ -284,19 +285,19 @@
         proxy.echo();
         assertNotNull(tester.arguments);
         assertEquals(0, tester.arguments.length);
-        assertEquals(Echo.class.getMethod("echo", new Class[]{}), tester.method);
+        assertEquals(Echo.class.getMethod("echo"), tester.method);
         assertEquals(target, tester.proxy);
         proxy.echoBack("Hello");
         assertNotNull(tester.arguments);
         assertEquals(1, tester.arguments.length);
         assertEquals("Hello", tester.arguments[0]);
-        assertEquals(Echo.class.getMethod("echoBack", new Class[]{String.class}), tester.method);
+        assertEquals(Echo.class.getMethod("echoBack", String.class), tester.method);
         proxy.echoBack("Hello", "World");
         assertNotNull(tester.arguments);
         assertEquals(2, tester.arguments.length);
         assertEquals("Hello", tester.arguments[0]);
         assertEquals("World", tester.arguments[1]);
-        assertEquals(Echo.class.getMethod("echoBack", new Class[]{String.class, String.class}), tester.method);
+        assertEquals(Echo.class.getMethod("echoBack", String.class, String.class), tester.method);
     }
 
     public void testPrimitiveParameter()
@@ -307,7 +308,7 @@
 
     public void testProxyWithCheckedException() throws Exception
     {
-        final Echo proxy = (Echo) factory.createDelegatorProxy(new ConstantProvider(new EchoImpl()), ECHO_ONLY);
+        final Echo proxy = factory.createDelegatorProxy(new ConstantProvider<Echo>(new EchoImpl()), Echo.class);
         try
         {
             proxy.ioException();
@@ -320,7 +321,7 @@
 
     public void testProxyWithUncheckedException() throws Exception
     {
-        final Echo proxy = (Echo) factory.createDelegatorProxy(new ConstantProvider(new EchoImpl()), ECHO_ONLY);
+        final Echo proxy = factory.createDelegatorProxy(new ConstantProvider<Echo>(new EchoImpl()), Echo.class);
         try
         {
             proxy.illegalArgument();