< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/Bootstrap.java

Print this page

        

@@ -31,10 +31,13 @@
 import java.lang.invoke.CallSite;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodHandles.Lookup;
 import java.lang.invoke.MethodType;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import jdk.dynalink.CallSiteDescriptor;
 import jdk.dynalink.DynamicLinker;
 import jdk.dynalink.DynamicLinkerFactory;
 import jdk.dynalink.beans.BeansLinker;
 import jdk.dynalink.beans.StaticClass;

@@ -68,10 +71,11 @@
     private static final MethodHandle VOID_TO_OBJECT = MH.constant(Object.class, ScriptRuntime.UNDEFINED);
 
     private static final BeansLinker beansLinker = new BeansLinker(Bootstrap::createMissingMemberHandler);
     private static final GuardingDynamicLinker[] prioritizedLinkers;
     private static final GuardingDynamicLinker[] fallbackLinkers;
+
     static {
         final NashornBeansLinker nashornBeansLinker = new NashornBeansLinker(beansLinker);
         prioritizedLinkers = new GuardingDynamicLinker[] {
             new NashornLinker(),
             new NashornPrimitiveLinker(),

@@ -88,10 +92,23 @@
     // do not create me!!
     private Bootstrap() {
     }
 
     /**
+     * Returns a list of exposed nashorn dynalink linkers.
+     *
+     * @return a list of exposed nashorn dynalink linkers.
+     */
+    public static List<GuardingDynamicLinker> getExposedLinkers() {
+        // we have to create BeansLinker without nashorn specific missing member handler!
+        // Or else, we'd return values such as 'undefined' to the external world!
+        final NashornBeansLinker nbl = new NashornBeansLinker(new BeansLinker());
+        final JSObjectLinker linker = new JSObjectLinker(nbl);
+        return Collections.singletonList(linker);
+    }
+
+    /**
      * Creates a Nashorn dynamic linker with the given app class loader.
      * @param appLoader the app class loader. It will be used to discover
      * additional language runtime linkers (if any).
      * @param unstableRelinkThreshold the unstable relink threshold
      * @return a newly created dynamic linker.
< prev index next >