< prev index next >

src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java

Print this page

        

*** 35,45 **** import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.security.AccessController; import java.security.PrivilegedAction; - import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; --- 35,44 ----
*** 576,602 **** // load class InvokerBytecodeGenerator.maybeDump(classBCName(className), classFile); Class<?> speciesCode; ! ClassLoader cl = topClass().getClassLoader(); ! ProtectionDomain pd = null; ! if (cl != null) { ! pd = AccessController.doPrivileged( ! new PrivilegedAction<>() { @Override ! public ProtectionDomain run() { ! return topClass().getProtectionDomain(); ! } ! }); ! } try { ! speciesCode = UNSAFE.defineClass(className, classFile, 0, classFile.length, cl, pd); } catch (Exception ex) { throw newInternalError(ex); } ! return speciesCode.asSubclass(topClass()); } // These are named like constants because there is only one per specialization scheme: private final String SPECIES_DATA = classBCName(metaType); --- 575,595 ---- // load class InvokerBytecodeGenerator.maybeDump(classBCName(className), classFile); Class<?> speciesCode; ! MethodHandles.Lookup lookup = IMPL_LOOKUP.in(topClass()); ! speciesCode = AccessController.doPrivileged(new PrivilegedAction<>() { @Override ! public Class<?> run() { try { ! return lookup.defineClass(classFile); } catch (Exception ex) { throw newInternalError(ex); } ! } ! }); return speciesCode.asSubclass(topClass()); } // These are named like constants because there is only one per specialization scheme: private final String SPECIES_DATA = classBCName(metaType);
< prev index next >