home *** CD-ROM | disk | FTP | other *** search
- package java.lang.reflect;
-
- import java.io.Serializable;
- import java.lang.ref.Reference;
- import java.lang.ref.WeakReference;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.WeakHashMap;
- import sun.misc.ProxyGenerator;
-
- public class Proxy implements Serializable {
- private static final String proxyClassNamePrefix = "$Proxy";
- private static final Class[] constructorParams;
- private static Map loaderToCache;
- private static Object pendingGenerationMarker;
- private static long nextUniqueNumber;
- private static Object nextUniqueNumberLock;
- private static Map proxyClasses;
- // $FF: renamed from: h java.lang.reflect.InvocationHandler
- protected InvocationHandler field_0;
- // $FF: synthetic field
- static Class class$java$lang$reflect$InvocationHandler;
-
- private Proxy() {
- }
-
- protected Proxy(InvocationHandler var1) {
- this.field_0 = var1;
- }
-
- public static Class getProxyClass(ClassLoader var0, Class[] var1) throws IllegalArgumentException {
- Class var2 = null;
- StringBuffer var3 = new StringBuffer();
-
- for(int var4 = 0; var4 < var1.length; ++var4) {
- Class var5 = null;
-
- try {
- var5 = Class.forName(var1[var4].getName(), false, var0);
- } catch (ClassNotFoundException var35) {
- }
-
- if (var5 != var1[var4]) {
- throw new IllegalArgumentException(var1[var4] + " is not visible from class loader");
- }
-
- if (!var5.isInterface()) {
- throw new IllegalArgumentException(var5.getName() + " is not an interface");
- }
-
- var3.append(var1[var4].getName()).append(';');
- }
-
- String var39 = var3.toString();
- Map var7 = loaderToCache;
- Object var6;
- synchronized(var7) {
- var6 = (Map)loaderToCache.get(var0);
- if (var6 == null) {
- var6 = new HashMap(3);
- loaderToCache.put(var0, var6);
- }
- }
-
- synchronized(var6) {
- while(true) {
- Object var9 = ((Map)var6).get(var39);
- if (var9 instanceof Reference) {
- var2 = (Class)((Reference)var9).get();
- }
-
- if (var2 != null) {
- return var2;
- }
-
- if (var9 != pendingGenerationMarker) {
- ((Map)var6).put(var39, pendingGenerationMarker);
- break;
- }
-
- try {
- var6.wait();
- } catch (InterruptedException var34) {
- }
- }
- }
-
- try {
- String var40 = null;
-
- for(int var10 = 0; var10 < var1.length; ++var10) {
- int var11 = var1[var10].getModifiers();
- if (!Modifier.isPublic(var11)) {
- String var12 = var1[var10].getName();
- int var13 = var12.lastIndexOf(46);
- String var14 = var13 == -1 ? "" : var12.substring(0, var13 + 1);
- if (var40 == null) {
- var40 = var14;
- } else if (!var14.equals(var40)) {
- throw new IllegalArgumentException("non-public interfaces from different packages");
- }
- }
- }
-
- if (var40 == null) {
- var40 = "";
- }
-
- Object var42 = nextUniqueNumberLock;
- long var41;
- synchronized(var42) {
- var41 = (long)(nextUniqueNumber++);
- }
-
- String var15 = var40 + "$Proxy" + var41;
- byte[] var16 = ProxyGenerator.generateProxyClass(var15, var1);
-
- try {
- var2 = defineClass0(var0, var15, var16, 0, var16.length);
- } catch (ClassFormatError var32) {
- throw new IllegalArgumentException(((Throwable)var32).toString());
- }
-
- proxyClasses.put(var2, (Object)null);
- } finally {
- synchronized(var6) {
- if (var2 != null) {
- ((Map)var6).put(var39, new WeakReference(var2));
- } else {
- ((Map)var6).remove(var39);
- }
-
- var6.notifyAll();
- }
- }
-
- return var2;
- }
-
- public static Object newProxyInstance(ClassLoader var0, Class[] var1, InvocationHandler var2) throws IllegalArgumentException {
- if (var2 == null) {
- throw new NullPointerException();
- } else {
- Class var3 = getProxyClass(var0, var1);
-
- try {
- Constructor var4 = var3.getConstructor(constructorParams);
- return var4.newInstance(var2);
- } catch (NoSuchMethodException var8) {
- throw new InternalError(((Throwable)var8).toString());
- } catch (IllegalAccessException var9) {
- throw new InternalError(((Throwable)var9).toString());
- } catch (InstantiationException var10) {
- throw new InternalError(((Throwable)var10).toString());
- } catch (InvocationTargetException var11) {
- throw new InternalError(((Throwable)var11).toString());
- }
- }
- }
-
- public static boolean isProxyClass(Class var0) {
- if (var0 == null) {
- throw new NullPointerException();
- } else {
- return proxyClasses.containsKey(var0);
- }
- }
-
- public static InvocationHandler getInvocationHandler(Object var0) throws IllegalArgumentException {
- if (!isProxyClass(var0.getClass())) {
- throw new IllegalArgumentException("not a proxy instance");
- } else {
- Proxy var1 = (Proxy)var0;
- return var1.field_0;
- }
- }
-
- private static native Class defineClass0(ClassLoader var0, String var1, byte[] var2, int var3, int var4);
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- static {
- constructorParams = new Class[]{class$java$lang$reflect$InvocationHandler == null ? (class$java$lang$reflect$InvocationHandler = class$("java.lang.reflect.InvocationHandler")) : class$java$lang$reflect$InvocationHandler};
- loaderToCache = new WeakHashMap(3);
- pendingGenerationMarker = new Object();
- nextUniqueNumber = 0L;
- nextUniqueNumberLock = new Object();
- proxyClasses = Collections.synchronizedMap(new WeakHashMap(3));
- }
- }
-