commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mben...@apache.org
Subject svn commit: r1520917 - /commons/proper/proxy/branches/version-2.0-work/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
Date Sun, 08 Sep 2013 20:13:57 GMT
Author: mbenson
Date: Sun Sep  8 20:13:56 2013
New Revision: 1520917

URL: http://svn.apache.org/r1520917
Log:
refactoring and scoping

Modified:
    commons/proper/proxy/branches/version-2.0-work/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java

Modified: commons/proper/proxy/branches/version-2.0-work/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java?rev=1520917&r1=1520916&r2=1520917&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
(original)
+++ commons/proper/proxy/branches/version-2.0-work/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
Sun Sep  8 20:13:56 2013
@@ -67,7 +67,11 @@ public class ASM4ProxyFactory extends Ab
     private <T> T createProxy(final ClassLoader classLoader, InvocationHandler invocationHandler,
final Class<?>... proxyClasses)
     {
     	final Class<?> proxyClass = PROXY_CLASS_CACHE.getProxyClass(classLoader, proxyClasses);
-    	return ProxyGenerator.constructProxy(proxyClass, invocationHandler);
+    	final Object instance = Unsafe.allocateInstance(proxyClass);
+		Unsafe.setValue(ProxyGenerator.getDeclaredField(proxyClass, ProxyGenerator.HANDLER_NAME),
instance, invocationHandler);
+		@SuppressWarnings("unchecked")
+		final T result = (T) instance;
+		return result;
     }
 
     private static class ProxyGenerator extends AbstractProxyClassGenerator implements Opcodes
@@ -96,15 +100,6 @@ public class ASM4ProxyFactory extends Ab
 			}
         }
 
-        public static <T> T constructProxy(final Class<?> clazz, final java.lang.reflect.InvocationHandler
handler) throws IllegalStateException
-        {
-            final Object instance = Unsafe.allocateInstance(clazz);
-            Unsafe.setValue(getDeclaredField(clazz, HANDLER_NAME), instance, handler);
-            @SuppressWarnings("unchecked")
-			final T result = (T) instance;
-			return result;
-        }
-
         private static Field getDeclaredField(final Class<?> clazz, final String fieldName)
         {
             try
@@ -118,7 +113,7 @@ public class ASM4ProxyFactory extends Ab
             }
         }
 
-        public static byte[] generateProxy(final Class<?> classToProxy, final String
proxyName, final Method[] methods, final Class<?>... interfaces) throws ProxyFactoryException
+        private static byte[] generateProxy(final Class<?> classToProxy, final String
proxyName, final Method[] methods, final Class<?>... interfaces) throws ProxyFactoryException
         {
             final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
 
@@ -477,7 +472,7 @@ public class ASM4ProxyFactory extends Ab
             throw new IllegalStateException("Type: " + type.getCanonicalName() + " is not
a primitive type");
         }
 
-        static String getCastType(final Class<?> returnType)
+        private static String getCastType(final Class<?> returnType)
         {
             if (returnType.isPrimitive())
             {
@@ -576,7 +571,7 @@ public class ASM4ProxyFactory extends Ab
             mv.visitTypeInsn(ANEWARRAY, type.getCanonicalName().replace('.', '/'));
         }
 
-        static String getMethodSignatureAsString(final Class<?> returnType, final Class<?>[]
parameterTypes)
+        private static String getMethodSignatureAsString(final Class<?> returnType,
final Class<?>[] parameterTypes)
         {
             final StringBuilder builder = new StringBuilder("(");
             for (final Class<?> parameterType : parameterTypes) {
@@ -634,7 +629,7 @@ public class ASM4ProxyFactory extends Ab
             throw new IllegalStateException("Type: " + type.getCanonicalName() + " is not
a primitive type");
         }
 
-        public static String getAsmTypeAsString(final Class<?> parameterType, final
boolean wrap)
+        private static String getAsmTypeAsString(final Class<?> parameterType, final
boolean wrap)
         {
             if (parameterType.isArray())
             {
@@ -661,179 +656,6 @@ public class ASM4ProxyFactory extends Ab
             }
             return className.replace('.', '/');
         }
-
-        private static class Unsafe
-        {
-            // sun.misc.Unsafe
-            private static final Object unsafe;
-            private static final Method defineClass;
-            private static final Method allocateInstance;
-            private static final Method putObject;
-            private static final Method objectFieldOffset;
-
-            static
-            {
-                final Class<?> unsafeClass;
-                try {
-                    unsafeClass = AccessController.doPrivileged(new PrivilegedAction<Class<?>>()
-            		{
-                        @Override
-                        public Class<?> run()
-                        {
-                            try
-                            {
-                                return Thread.currentThread().getContextClassLoader().loadClass("sun.misc.Unsafe");
-                            }
-                            catch (Exception e)
-                            {
-                                try
-                                {
-                                    return ClassLoader.getSystemClassLoader().loadClass("sun.misc.Unsafe");
-                                }
-                                catch (ClassNotFoundException e1)
-                                {
-                                    throw new IllegalStateException("Cannot get sun.misc.Unsafe",
e);
-                                }
-                            }
-                        }
-                    });
-                }
-                catch (Exception e)
-                {
-                    throw new IllegalStateException("Cannot get sun.misc.Unsafe class", e);
-                }
-
-                unsafe = AccessController.doPrivileged(new PrivilegedAction<Object>()
-        		{
-                    @Override
-                    public Object run()
-                    {
-                        try
-                        {
-                            final Field field = unsafeClass.getDeclaredField("theUnsafe");
-                            field.setAccessible(true);
-                            return field.get(null);
-                        }
-                        catch (Exception e)
-                        {
-                            throw new IllegalStateException("Cannot get sun.misc.Unsafe",
e);
-                        }
-                    }
-                });
-                allocateInstance = AccessController.doPrivileged(new PrivilegedAction<Method>()
-        		{
-                    @Override
-                    public Method run()
-                    {
-                        try
-                        {
-                            final Method mtd = unsafeClass.getDeclaredMethod("allocateInstance",
Class.class);
-                            mtd.setAccessible(true);
-                            return mtd;
-                        }
-                        catch (Exception e)
-                        {
-                            throw new IllegalStateException("Cannot get sun.misc.Unsafe.allocateInstance",
e);
-                        }
-                    }
-                });
-                objectFieldOffset = AccessController.doPrivileged(new PrivilegedAction<Method>()
-        		{
-                    @Override
-                    public Method run()
-                    {
-                        try
-                        {
-                            final Method mtd = unsafeClass.getDeclaredMethod("objectFieldOffset",
Field.class);
-                            mtd.setAccessible(true);
-                            return mtd;
-                        }
-                        catch (Exception e)
-                        {
-                            throw new IllegalStateException("Cannot get sun.misc.Unsafe.objectFieldOffset",
e);
-                        }
-                    }
-                });
-                putObject = AccessController.doPrivileged(new PrivilegedAction<Method>()
-        		{
-                    @Override
-                    public Method run()
-                    {
-                        try
-                        {
-                            final Method mtd = unsafeClass.getDeclaredMethod("putObject",
Object.class, long.class, Object.class);
-                            mtd.setAccessible(true);
-                            return mtd;
-                        }
-                        catch (Exception e)
-                        {
-                            throw new IllegalStateException("Cannot get sun.misc.Unsafe.putObject",
e);
-                        }
-                    }
-                });
-                defineClass = AccessController.doPrivileged(new PrivilegedAction<Method>()
-        		{
-                    @Override
-                    public Method run()
-                    {
-                        try
-                        {
-                            final Method mtd = unsafeClass.getDeclaredMethod("defineClass",
String.class, byte[].class, int.class, int.class, ClassLoader.class, ProtectionDomain.class);
-                            mtd.setAccessible(true);
-                            return mtd;
-                        }
-                        catch (Exception e)
-                        {
-                            throw new IllegalStateException("Cannot get sun.misc.Unsafe.defineClass",
e);
-                        }
-                    }
-                });
-            }
-
-            private static Object allocateInstance(final Class<?> clazz)
-            {
-                try
-                {
-                    return allocateInstance.invoke(unsafe, clazz);
-                }
-                catch (IllegalAccessException e)
-                {
-                    throw new IllegalStateException("Failed to allocateInstance of Proxy
class " + clazz.getName(), e);
-                }
-                catch (InvocationTargetException e)
-                {
-                    final Throwable throwable = e.getTargetException() != null ? e.getTargetException()
: e;
-                    throw new IllegalStateException("Failed to allocateInstance of Proxy
class " + clazz.getName(), throwable);
-                }
-            }
-
-            private static void setValue(final Field field, final Object object, final Object
value)
-            {
-                final long offset;
-                try
-                {
-                    offset = (Long) objectFieldOffset.invoke(unsafe, field);
-                }
-                catch (Exception e)
-                {
-                    throw new IllegalStateException("Failed getting offset for: field=" +
field.getName() + "  class=" + field.getDeclaringClass().getName(), e);
-                }
-
-                try
-                {
-                    putObject.invoke(unsafe, object, offset, value);
-                }
-                catch (Exception e)
-                {
-                    throw new IllegalStateException("Failed putting field=" + field.getName()
+ "  class=" + field.getDeclaringClass().getName(), e);
-                }
-            }
-
-            private static Class<?> defineClass(final ClassLoader loader, final Class<?>
clsToProxy, final String proxyName, final byte[] proxyBytes) throws IllegalAccessException,
InvocationTargetException
-            {
-                return (Class<?>) defineClass.invoke(unsafe, proxyName, proxyBytes,
0, proxyBytes.length, loader, clsToProxy.getProtectionDomain());
-            }
-        }
     }
 
     //////////////// these classes should be protected in ProxyFactory
@@ -972,4 +794,177 @@ public class ASM4ProxyFactory extends Ab
             }
         }
     }
+
+	static class Unsafe
+	{
+	    // sun.misc.Unsafe
+	    private static final Object unsafe;
+	    private static final Method defineClass;
+	    private static final Method allocateInstance;
+	    private static final Method putObject;
+	    private static final Method objectFieldOffset;
+	
+	    static
+	    {
+	        final Class<?> unsafeClass;
+	        try {
+	            unsafeClass = AccessController.doPrivileged(new PrivilegedAction<Class<?>>()
+	    		{
+	                @Override
+	                public Class<?> run()
+	                {
+	                    try
+	                    {
+	                        return Thread.currentThread().getContextClassLoader().loadClass("sun.misc.Unsafe");
+	                    }
+	                    catch (Exception e)
+	                    {
+	                        try
+	                        {
+	                            return ClassLoader.getSystemClassLoader().loadClass("sun.misc.Unsafe");
+	                        }
+	                        catch (ClassNotFoundException e1)
+	                        {
+	                            throw new IllegalStateException("Cannot get sun.misc.Unsafe",
e);
+	                        }
+	                    }
+	                }
+	            });
+	        }
+	        catch (Exception e)
+	        {
+	            throw new IllegalStateException("Cannot get sun.misc.Unsafe class", e);
+	        }
+	
+	        unsafe = AccessController.doPrivileged(new PrivilegedAction<Object>()
+			{
+	            @Override
+	            public Object run()
+	            {
+	                try
+	                {
+	                    final Field field = unsafeClass.getDeclaredField("theUnsafe");
+	                    field.setAccessible(true);
+	                    return field.get(null);
+	                }
+	                catch (Exception e)
+	                {
+	                    throw new IllegalStateException("Cannot get sun.misc.Unsafe", e);
+	                }
+	            }
+	        });
+	        allocateInstance = AccessController.doPrivileged(new PrivilegedAction<Method>()
+			{
+	            @Override
+	            public Method run()
+	            {
+	                try
+	                {
+	                    final Method mtd = unsafeClass.getDeclaredMethod("allocateInstance",
Class.class);
+	                    mtd.setAccessible(true);
+	                    return mtd;
+	                }
+	                catch (Exception e)
+	                {
+	                    throw new IllegalStateException("Cannot get sun.misc.Unsafe.allocateInstance",
e);
+	                }
+	            }
+	        });
+	        objectFieldOffset = AccessController.doPrivileged(new PrivilegedAction<Method>()
+			{
+	            @Override
+	            public Method run()
+	            {
+	                try
+	                {
+	                    final Method mtd = unsafeClass.getDeclaredMethod("objectFieldOffset",
Field.class);
+	                    mtd.setAccessible(true);
+	                    return mtd;
+	                }
+	                catch (Exception e)
+	                {
+	                    throw new IllegalStateException("Cannot get sun.misc.Unsafe.objectFieldOffset",
e);
+	                }
+	            }
+	        });
+	        putObject = AccessController.doPrivileged(new PrivilegedAction<Method>()
+			{
+	            @Override
+	            public Method run()
+	            {
+	                try
+	                {
+	                    final Method mtd = unsafeClass.getDeclaredMethod("putObject", Object.class,
long.class, Object.class);
+	                    mtd.setAccessible(true);
+	                    return mtd;
+	                }
+	                catch (Exception e)
+	                {
+	                    throw new IllegalStateException("Cannot get sun.misc.Unsafe.putObject",
e);
+	                }
+	            }
+	        });
+	        defineClass = AccessController.doPrivileged(new PrivilegedAction<Method>()
+			{
+	            @Override
+	            public Method run()
+	            {
+	                try
+	                {
+	                    final Method mtd = unsafeClass.getDeclaredMethod("defineClass", String.class,
byte[].class, int.class, int.class, ClassLoader.class, ProtectionDomain.class);
+	                    mtd.setAccessible(true);
+	                    return mtd;
+	                }
+	                catch (Exception e)
+	                {
+	                    throw new IllegalStateException("Cannot get sun.misc.Unsafe.defineClass",
e);
+	                }
+	            }
+	        });
+	    }
+	
+	    static Object allocateInstance(final Class<?> clazz)
+	    {
+	        try
+	        {
+	            return allocateInstance.invoke(unsafe, clazz);
+	        }
+	        catch (IllegalAccessException e)
+	        {
+	            throw new IllegalStateException("Failed to allocateInstance of Proxy class "
+ clazz.getName(), e);
+	        }
+	        catch (InvocationTargetException e)
+	        {
+	            final Throwable throwable = e.getTargetException() != null ? e.getTargetException()
: e;
+	            throw new IllegalStateException("Failed to allocateInstance of Proxy class "
+ clazz.getName(), throwable);
+	        }
+	    }
+	
+	    static void setValue(final Field field, final Object object, final Object value)
+	    {
+	        final long offset;
+	        try
+	        {
+	            offset = (Long) objectFieldOffset.invoke(unsafe, field);
+	        }
+	        catch (Exception e)
+	        {
+	            throw new IllegalStateException("Failed getting offset for: field=" + field.getName()
+ "  class=" + field.getDeclaringClass().getName(), e);
+	        }
+	
+	        try
+	        {
+	            putObject.invoke(unsafe, object, offset, value);
+	        }
+	        catch (Exception e)
+	        {
+	            throw new IllegalStateException("Failed putting field=" + field.getName() +
"  class=" + field.getDeclaringClass().getName(), e);
+	        }
+	    }
+	
+	    static Class<?> defineClass(final ClassLoader loader, final Class<?> clsToProxy,
final String proxyName, final byte[] proxyBytes) throws IllegalAccessException, InvocationTargetException
+	    {
+	        return (Class<?>) defineClass.invoke(unsafe, proxyName, proxyBytes, 0, proxyBytes.length,
loader, clsToProxy.getProtectionDomain());
+	    }
+	}
 }
\ No newline at end of file



Mime
View raw message