< prev index next >
src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java
Print this page
@@ -35,11 +35,10 @@
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;
@@ -576,27 +575,21 @@
// load class
InvokerBytecodeGenerator.maybeDump(classBCName(className), classFile);
Class<?> speciesCode;
- ClassLoader cl = topClass().getClassLoader();
- ProtectionDomain pd = null;
- if (cl != null) {
- pd = AccessController.doPrivileged(
- new PrivilegedAction<>() {
+ MethodHandles.Lookup lookup = IMPL_LOOKUP.in(topClass());
+ speciesCode = AccessController.doPrivileged(new PrivilegedAction<>() {
@Override
- public ProtectionDomain run() {
- return topClass().getProtectionDomain();
- }
- });
- }
+ public Class<?> run() {
try {
- speciesCode = UNSAFE.defineClass(className, classFile, 0, classFile.length, cl, pd);
+ 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 >