src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/BrowserJSObjectLinker.java
Print this page
*** 43,53 ****
/**
* A Dynalink linker to handle web browser built-in JS (DOM etc.) objects.
*/
final class BrowserJSObjectLinker implements TypeBasedGuardingDynamicLinker {
! private static final ClassLoader myLoader = BrowserJSObjectLinker.class.getClassLoader();
private static final String JSOBJECT_CLASS = "netscape.javascript.JSObject";
// not final because this is lazily initialized
// when we hit a subclass for the first time.
private static volatile Class<?> jsObjectClass;
private final NashornBeansLinker nashornBeansLinker;
--- 43,61 ----
/**
* A Dynalink linker to handle web browser built-in JS (DOM etc.) objects.
*/
final class BrowserJSObjectLinker implements TypeBasedGuardingDynamicLinker {
! private static ClassLoader extLoader;
! static {
! extLoader = BrowserJSObjectLinker.class.getClassLoader();
! // in case nashorn is loaded as bootstrap!
! if (extLoader == null) {
! extLoader = ClassLoader.getSystemClassLoader().getParent();
! }
! }
!
private static final String JSOBJECT_CLASS = "netscape.javascript.JSObject";
// not final because this is lazily initialized
// when we hit a subclass for the first time.
private static volatile Class<?> jsObjectClass;
private final NashornBeansLinker nashornBeansLinker;
*** 67,77 ****
}
// check if this class is a subclass of JSObject
Class<?> clazz = type;
while (clazz != null) {
! if (clazz.getClassLoader() == myLoader &&
clazz.getName().equals(JSOBJECT_CLASS)) {
jsObjectClass = clazz;
return true;
}
clazz = clazz.getSuperclass();
--- 75,85 ----
}
// check if this class is a subclass of JSObject
Class<?> clazz = type;
while (clazz != null) {
! if (clazz.getClassLoader() == extLoader &&
clazz.getName().equals(JSOBJECT_CLASS)) {
jsObjectClass = clazz;
return true;
}
clazz = clazz.getSuperclass();