Author: krosenvold
Date: Wed May  4 20:35:00 2011
New Revision: 1099597

URL: http://svn.apache.org/viewvc?rev=1099597&view=rev
Log:
o Removed use of dynamic proxy.

Reflection is faster and simpler in this case.

Modified:
    
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java

Modified: 
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java?rev=1099597&r1=1099596&r2=1099597&view=diff
==============================================================================
--- 
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java
 (original)
+++ 
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java
 Wed May  4 20:35:00 2011
@@ -19,10 +19,14 @@ package org.apache.maven.surefire.booter
  * under the License.
  */
 
-import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
+import java.util.Iterator;
 import org.apache.maven.surefire.providerapi.SurefireProvider;
+import org.apache.maven.surefire.report.ReporterException;
+import org.apache.maven.surefire.suite.RunResult;
+import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.apache.maven.surefire.util.ReflectionUtils;
+
 
 /**
  * Creates the surefire provider.
@@ -44,9 +48,12 @@ public class ProviderFactory
 
     private final Object reporterManagerFactory;
 
+    private static final Class[] invokeParamaters = new Class[]{ Object.class 
};
+
 
     public ProviderFactory( StartupConfiguration startupConfiguration, 
ProviderConfiguration providerConfiguration,
-                            ClassLoader surefireClassLoader, ClassLoader 
testsClassLoader, Object reporterManagerFactory )
+                            ClassLoader surefireClassLoader, ClassLoader 
testsClassLoader,
+                            Object reporterManagerFactory )
     {
         this.providerConfiguration = providerConfiguration;
         this.surefireClassLoader = surefireClassLoader;
@@ -74,41 +81,42 @@ public class ProviderFactory
         Object provider = surefireReflector.instantiateProvider( 
starterConfiguration.getProviderClassName(), o );
         Thread.currentThread().setContextClassLoader( context );
 
-        return createClassLoaderProxy( provider );
+        return new ProviderProxy( provider );
     }
 
-    private SurefireProvider createClassLoaderProxy( Object target )
-    {
-        return (SurefireProvider) Proxy.newProxyInstance( 
this.getClass().getClassLoader(),
-                                                          new Class[]{ 
SurefireProvider.class },
-                                                          new 
ClassLoaderProxy( target ) );
-    }
 
-    private class ClassLoaderProxy
-        implements InvocationHandler
+    private class ProviderProxy
+        implements SurefireProvider
     {
-        private final Object target;
+        private final Object providerInOtherClassLoader;
+
+
+        private ProviderProxy( Object providerInOtherClassLoader )
+        {
+            this.providerInOtherClassLoader = providerInOtherClassLoader;
+        }
+
+        public Iterator getSuites()
+        {
+            return (Iterator) ReflectionUtils.invokeGetter( 
providerInOtherClassLoader, "getSuites" );
+        }
 
-        public ClassLoaderProxy( Object delegate )
+        public RunResult invoke( Object forkTestSet )
+            throws TestSetFailedException, ReporterException
         {
-            this.target = delegate;
+            final Method invoke =
+                ReflectionUtils.getMethod( 
providerInOtherClassLoader.getClass(), "invoke", invokeParamaters );
+
+            final Object result = ReflectionUtils.invokeMethodWithArray( 
providerInOtherClassLoader, invoke,
+                                                                         new 
Object[]{ forkTestSet } );
+            return (RunResult) surefireReflector.convertIfRunResult( result );
         }
 
-        public Object invoke( Object proxy, Method method, Object[] args )
-            throws Throwable
+        public void cancel()
         {
-            ClassLoader original = 
java.lang.Thread.currentThread().getContextClassLoader();
-            Thread.currentThread().setContextClassLoader( testsClassLoader );
-            try
-            {
-                Method delegateMethod = target.getClass().getMethod( 
method.getName(), method.getParameterTypes() );
-                final Object result = delegateMethod.invoke( target, args );
-                return surefireReflector.convertIfRunResult( result );
-            }
-            finally
-            {
-                Thread.currentThread().setContextClassLoader( original );
-            }
+            final Method invoke =
+                ReflectionUtils.getMethod( 
providerInOtherClassLoader.getClass(), "cancel", new Class[]{ } );
+            ReflectionUtils.invokeMethodWithArray( providerInOtherClassLoader, 
invoke, null );
         }
     }
 }


Reply via email to