Mercurial > hg > openjdk > jdk8 > jdk
changeset 8805:83c768d6cb93
8028055: (reflect) invoking Method/Constructor in anonymous classes breaks with -Dsun.reflect.noInflation=true
Reviewed-by: briangoetz
author | jfranck |
---|---|
date | Thu, 14 Nov 2013 12:17:37 +0100 |
parents | ecf85f4aecf0 |
children | 65f7b83ab477 59f46f135584 |
files | src/share/classes/sun/reflect/ReflectionFactory.java src/share/classes/sun/reflect/misc/ReflectUtil.java test/java/lang/invoke/lambda/RepetitiveLambdaSerialization.java test/sun/reflect/AnonymousNewInstance/ManyNewInstanceAnonTest.java |
diffstat | 4 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/reflect/ReflectionFactory.java Thu Nov 14 10:40:33 2013 +0000 +++ b/src/share/classes/sun/reflect/ReflectionFactory.java Thu Nov 14 12:17:37 2013 +0100 @@ -33,6 +33,7 @@ import java.security.AccessController; import java.security.Permission; import java.security.PrivilegedAction; +import sun.reflect.misc.ReflectUtil; /** <P> The master factory for all reflective objects, both those in java.lang.reflect (Fields, Methods, Constructors) as well as their @@ -144,7 +145,7 @@ public MethodAccessor newMethodAccessor(Method method) { checkInitted(); - if (noInflation) { + if (noInflation && !ReflectUtil.isVMAnonymousClass(method.getDeclaringClass())) { return new MethodAccessorGenerator(). generateMethod(method.getDeclaringClass(), method.getName(), @@ -181,7 +182,7 @@ return new BootstrapConstructorAccessorImpl(c); } - if (noInflation) { + if (noInflation && !ReflectUtil.isVMAnonymousClass(c.getDeclaringClass())) { return new MethodAccessorGenerator(). generateConstructor(c.getDeclaringClass(), c.getParameterTypes(),
--- a/src/share/classes/sun/reflect/misc/ReflectUtil.java Thu Nov 14 10:40:33 2013 +0000 +++ b/src/share/classes/sun/reflect/misc/ReflectUtil.java Thu Nov 14 12:17:37 2013 +0100 @@ -305,6 +305,6 @@ * (not to be confused with a Java Language anonymous inner class). */ public static boolean isVMAnonymousClass(Class<?> cls) { - return cls.getSimpleName().contains("/"); + return cls.getName().indexOf("/") > -1; } }
--- a/test/java/lang/invoke/lambda/RepetitiveLambdaSerialization.java Thu Nov 14 10:40:33 2013 +0000 +++ b/test/java/lang/invoke/lambda/RepetitiveLambdaSerialization.java Thu Nov 14 12:17:37 2013 +0100 @@ -27,6 +27,7 @@ * @summary Lambda serialization fails once reflection proxy generation kicks in * @author Robert Field * @run main/othervm RepetitiveLambdaSerialization + * @run main/othervm -Dsun.reflect.noInflation=true RepetitiveLambdaSerialization */ import java.io.*;
--- a/test/sun/reflect/AnonymousNewInstance/ManyNewInstanceAnonTest.java Thu Nov 14 10:40:33 2013 +0000 +++ b/test/sun/reflect/AnonymousNewInstance/ManyNewInstanceAnonTest.java Thu Nov 14 12:17:37 2013 +0100 @@ -30,6 +30,7 @@ * @compile -XDignore.symbol.file ManyNewInstanceAnonTest.java * @run main ClassFileInstaller ManyNewInstanceAnonTest * @run main/othervm -Xbootclasspath/a:. -Xverify:all ManyNewInstanceAnonTest + * @run main/othervm -Xbootclasspath/a:. -Xverify:all -Dsun.reflection.noInflation=true ManyNewInstanceAnonTest */ import java.io.ByteArrayOutputStream; import java.io.InputStream;