From bebb11deb767f07f1f8c4435e54fb30f4feb5fce Mon Sep 17 00:00:00 2001 From: mchung Date: Wed, 17 Apr 2013 12:04:15 -0700 Subject: [PATCH] 8004260: dynamic proxy class should have the same Java language access as the proxy interfaces Reviewed-by: alanb, jrose, jdn --- .../classes/java/lang/reflect/Proxy.java | 187 ++++++++------- .../java/lang/reflect/ReflectPermission.java | 26 ++- .../classes/sun/misc/ProxyGenerator.java | 93 +++++--- .../reflect/annotation/AnnotationParser.java | 15 +- src/share/classes/sun/rmi/server/Util.java | 16 +- .../classes/sun/tracing/ProviderSkeleton.java | 8 +- .../nonPublicProxy/NonPublicProxyClass.java | 215 ++++++++++++++++++ .../Proxy/nonPublicProxy/SimpleProxy.java | 68 ++++++ .../reflect/Proxy/nonPublicProxy/p/Bar.java | 26 +++ .../reflect/Proxy/nonPublicProxy/p/Foo.java | 26 +++ .../loadProxyClasses/security.policy | 3 + 11 files changed, 537 insertions(+), 146 deletions(-) create mode 100644 test/java/lang/reflect/Proxy/nonPublicProxy/NonPublicProxyClass.java create mode 100644 test/java/lang/reflect/Proxy/nonPublicProxy/SimpleProxy.java create mode 100644 test/java/lang/reflect/Proxy/nonPublicProxy/p/Bar.java create mode 100644 test/java/lang/reflect/Proxy/nonPublicProxy/p/Foo.java diff --git a/src/share/classes/java/lang/reflect/Proxy.java b/src/share/classes/java/lang/reflect/Proxy.java index 2dd06020b..e6de8b779 100644 --- a/src/share/classes/java/lang/reflect/Proxy.java +++ b/src/share/classes/java/lang/reflect/Proxy.java @@ -28,7 +28,6 @@ package java.lang.reflect; import java.lang.ref.Reference; import java.lang.ref.WeakReference; import java.security.AccessController; -import java.security.Permission; import java.security.PrivilegedAction; import java.util.Arrays; import java.util.Collections; @@ -53,16 +52,14 @@ import sun.security.util.SecurityConstants; *

To create a proxy for some interface {@code Foo}: *

  *     InvocationHandler handler = new MyInvocationHandler(...);
- *     Class proxyClass = Proxy.getProxyClass(
- *         Foo.class.getClassLoader(), new Class[] { Foo.class });
- *     Foo f = (Foo) proxyClass.
- *         getConstructor(new Class[] { InvocationHandler.class }).
- *         newInstance(new Object[] { handler });
+ *     Class<?> proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), Foo.class);
+ *     Foo f = (Foo) proxyClass.getConstructor(InvocationHandler.class).
+ *                     newInstance(handler);
  * 
* or more simply: *
  *     Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
- *                                          new Class[] { Foo.class },
+ *                                          new Class<?>[] { Foo.class },
  *                                          handler);
  * 
* @@ -91,7 +88,11 @@ import sun.security.util.SecurityConstants; *

A proxy class has the following properties: * *