UnsafeAllocator.java 2.8 KB
package com.google.gson.internal;

import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public abstract class UnsafeAllocator
{
  public static UnsafeAllocator create()
  {
    try
    {
      Object localObject1 = Class.forName("sun.misc.Unsafe");
      final Object localObject4 = ((Class)localObject1).getDeclaredField("theUnsafe");
      ((Field)localObject4).setAccessible(true);
      localObject4 = ((Field)localObject4).get(null);
      localObject1 = new UnsafeAllocator()
      {
        public final <T> T newInstance(Class<T> paramAnonymousClass)
          throws Exception
        {
          return (T)this.a.invoke(localObject4, new Object[] { paramAnonymousClass });
        }
      };
      return (UnsafeAllocator)localObject1;
    }
    catch (Exception localException1)
    {
      try
      {
        Object localObject2 = ObjectStreamClass.class.getDeclaredMethod("getConstructorId", new Class[] { Class.class });
        ((Method)localObject2).setAccessible(true);
        final int i = ((Integer)((Method)localObject2).invoke(null, new Object[] { Object.class })).intValue();
        localObject2 = ObjectStreamClass.class.getDeclaredMethod("newInstance", new Class[] { Class.class, Integer.TYPE });
        ((Method)localObject2).setAccessible(true);
        localObject2 = new UnsafeAllocator()
        {
          public final <T> T newInstance(Class<T> paramAnonymousClass)
            throws Exception
          {
            return (T)this.a.invoke(null, new Object[] { paramAnonymousClass, Integer.valueOf(i) });
          }
        };
        return (UnsafeAllocator)localObject2;
      }
      catch (Exception localException2)
      {
        try
        {
          Object localObject3 = ObjectInputStream.class.getDeclaredMethod("newInstance", new Class[] { Class.class, Class.class });
          ((Method)localObject3).setAccessible(true);
          localObject3 = new UnsafeAllocator()
          {
            public final <T> T newInstance(Class<T> paramAnonymousClass)
              throws Exception
            {
              return (T)this.a.invoke(null, new Object[] { paramAnonymousClass, Object.class });
            }
          };
          return (UnsafeAllocator)localObject3;
        }
        catch (Exception localException3) {}
      }
    }
    new UnsafeAllocator()
    {
      public final <T> T newInstance(Class<T> paramAnonymousClass)
      {
        throw new UnsupportedOperationException("Cannot allocate " + paramAnonymousClass);
      }
    };
  }
  
  public abstract <T> T newInstance(Class<T> paramClass)
    throws Exception;
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/gson/internal/UnsafeAllocator.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */