< 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 >