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();