org.mozilla.javascript

Class VMBridge

Known Direct Subclasses:
VMBridge_jdk11, VMBridge_jdk13

public abstract class VMBridge
extends java.lang.Object

Method Summary

protected abstract Context
getContext(Object contextHelper)
Get Context instance associated with the current thread or null if none.
protected abstract ClassLoader
getCurrentThreadClassLoader()
Return the ClassLoader instance associated with the current thread.
protected Object
getInterfaceProxyHelper(ContextFactory cf, Class[] interfaces)
Create helper object to create later proxies implementing the specified interfaces later.
Iterator
getJavaIterator(Context cx, Scriptable scope, Object obj)
If "obj" is a java.util.Iterator or a java.lang.Iterable, return a wrapping as a JavaScript Iterator.
protected abstract Object
getThreadContextHelper()
Return a helper object to optimize Context access.
protected abstract boolean
isVarArgs(Member member)
Returns whether or not a given member (method or constructor) has variable arguments.
protected Object
newInterfaceProxy(Object proxyHelper, ContextFactory cf, InterfaceAdapter adapter, Object target, Scriptable topScope)
Create proxy object for InterfaceAdapter.
protected abstract void
setContext(Object contextHelper, Context cx)
Associate Context instance with the current thread or remove the current association if cx is null.
protected abstract boolean
tryToMakeAccessible(Object accessibleObject)
In many JVMSs, public methods in private classes are not accessible by default (Sun Bug #4071593).

Method Details

getContext

protected abstract Context getContext(Object contextHelper)
Get Context instance associated with the current thread or null if none.
Parameters:
contextHelper - The result of getThreadContextHelper() called from the current thread.

getCurrentThreadClassLoader

protected abstract ClassLoader getCurrentThreadClassLoader()
Return the ClassLoader instance associated with the current thread.

getInterfaceProxyHelper

protected Object getInterfaceProxyHelper(ContextFactory cf,
                                         Class[] interfaces)
Create helper object to create later proxies implementing the specified interfaces later. Under JDK 1.3 the implementation can look like:
 return java.lang.reflect.Proxy.getProxyClass(..., interfaces).
     getConstructor(new Class[] {
         java.lang.reflect.InvocationHandler.class });
 
Parameters:
interfaces - Array with one or more interface class objects.

getJavaIterator

public Iterator getJavaIterator(Context cx,
                                Scriptable scope,
                                Object obj)
If "obj" is a java.util.Iterator or a java.lang.Iterable, return a wrapping as a JavaScript Iterator. Otherwise, return null. This method is in VMBridge since Iterable is a JDK 1.5 addition.

getThreadContextHelper

protected abstract Object getThreadContextHelper()
Return a helper object to optimize Context access.

The runtime will pass the resulting helper object to the subsequent calls to getContext(Object contextHelper) and setContext(Object contextHelper, Context cx) methods. In this way the implementation can use the helper to cache information about current thread to make Context access faster.


isVarArgs

protected abstract boolean isVarArgs(Member member)
Returns whether or not a given member (method or constructor) has variable arguments. Variable argument methods have only been supported in Java since JDK 1.5.

newInterfaceProxy

protected Object newInterfaceProxy(Object proxyHelper,
                                   ContextFactory cf,
                                   InterfaceAdapter adapter,
                                   Object target,
                                   Scriptable topScope)
Create proxy object for InterfaceAdapter. The proxy should call InterfaceAdapter.invoke(ContextFactory cf, Object target, Scriptable topScope, Method method, Object[] args) as implementation of interface methods associated with proxyHelper.
Parameters:
proxyHelper - The result of the previous call to getInterfaceProxyHelper(ContextFactory,Class[]).

setContext

protected abstract void setContext(Object contextHelper,
                                   Context cx)
Associate Context instance with the current thread or remove the current association if cx is null.
Parameters:
contextHelper - The result of getThreadContextHelper() called from the current thread.

tryToMakeAccessible

protected abstract boolean tryToMakeAccessible(Object accessibleObject)
In many JVMSs, public methods in private classes are not accessible by default (Sun Bug #4071593). VMBridge instance should try to workaround that via, for example, calling method.setAccessible(true) when it is available. The implementation is responsible to catch all possible exceptions like SecurityException if the workaround is not available.
Returns:
true if it was possible to make method accessible or false otherwise.