Class FunctionObject
- java.lang.Object
-
- org.mozilla.javascript.ScriptableObject
-
- org.mozilla.javascript.IdScriptableObject
-
- org.mozilla.javascript.BaseFunction
-
- org.mozilla.javascript.FunctionObject
-
- All Implemented Interfaces:
java.io.Serializable
,Callable
,ConstProperties
,DebuggableObject
,Function
,IdFunctionCall
,Scriptable
,SymbolScriptable
public class FunctionObject extends BaseFunction
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.mozilla.javascript.ScriptableObject
ScriptableObject.GetterSlot, ScriptableObject.KeyComparator, ScriptableObject.Slot, ScriptableObject.SlotAccess
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
functionName
private boolean
hasVoidReturn
private boolean
isStatic
static int
JAVA_BOOLEAN_TYPE
static int
JAVA_DOUBLE_TYPE
static int
JAVA_INT_TYPE
static int
JAVA_OBJECT_TYPE
static int
JAVA_SCRIPTABLE_TYPE
static int
JAVA_STRING_TYPE
static int
JAVA_UNSUPPORTED_TYPE
(package private) MemberBox
member
private int
parmsLength
private int
returnTypeTag
private static boolean
sawSecurityException
private static long
serialVersionUID
private byte[]
typeTags
private static short
VARARGS_CTOR
private static short
VARARGS_METHOD
-
Fields inherited from class org.mozilla.javascript.BaseFunction
GENERATOR_FUNCTION_CLASS
-
Fields inherited from class org.mozilla.javascript.ScriptableObject
CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONST
-
Fields inherited from interface org.mozilla.javascript.Scriptable
NOT_FOUND
-
-
Constructor Summary
Constructors Constructor Description FunctionObject(java.lang.String name, java.lang.reflect.Member methodOrConstructor, Scriptable scope)
Create a JavaScript function object from a Java method.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addAsConstructor(Scriptable scope, Scriptable prototype)
Define this function as a JavaScript constructor.java.lang.Object
call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Performs conversions on argument types if needed and invokes the underlying Java method or constructor.static java.lang.Object
convertArg(Context cx, Scriptable scope, java.lang.Object arg, int typeTag)
static java.lang.Object
convertArg(Context cx, Scriptable scope, java.lang.Object arg, java.lang.Class<?> desired)
Deprecated.UsegetTypeTag(Class)
andconvertArg(Context, Scriptable, Object, int)
for type conversion.Scriptable
createObject(Context cx, Scriptable scope)
Return newScriptable
instance using the default constructor for the class of the underlying Java method.(package private) static java.lang.reflect.Method
findSingleMethod(java.lang.reflect.Method[] methods, java.lang.String name)
int
getArity()
Return the value defined by the method used to construct the object (number of parameters of the method, or 1 if the method is a "varargs" form).java.lang.String
getFunctionName()
int
getLength()
Return the same value asgetArity()
.(package private) static java.lang.reflect.Method[]
getMethodList(java.lang.Class<?> clazz)
Returns all public methods declared by the specified class.java.lang.reflect.Member
getMethodOrConstructor()
Get Java method or constructor this function represent.static int
getTypeTag(java.lang.Class<?> type)
(package private) void
initAsConstructor(Scriptable scope, Scriptable prototype)
(package private) boolean
isVarArgsConstructor()
(package private) boolean
isVarArgsMethod()
private void
readObject(java.io.ObjectInputStream in)
-
Methods inherited from class org.mozilla.javascript.BaseFunction
construct, decompile, execIdCall, fillConstructorProperties, findInstanceIdInfo, findPrototypeId, getClassName, getClassPrototype, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, getPrototypeProperty, getTypeOf, hasInstance, hasPrototypeProperty, init, initAsGeneratorFunction, initPrototypeId, isApply, isApplyOrCall, isGeneratorFunction, setImmunePrototypeProperty, setInstanceIdAttributes, setInstanceIdValue
-
Methods inherited from class org.mozilla.javascript.IdScriptableObject
activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultHas, defaultPut, defineOwnProperty, delete, delete, exportAsJSClass, findInstanceIdInfo, findPrototypeId, get, get, getAttributes, getAttributes, getIds, getOwnPropertyDescriptor, has, has, hasPrototypeMap, incompatibleCallError, initPrototypeConstructor, initPrototypeMethod, initPrototypeMethod, initPrototypeMethod, initPrototypeValue, initPrototypeValue, instanceIdInfo, put, put, setAttributes
-
Methods inherited from class org.mozilla.javascript.ScriptableObject
addLazilyInitializedValue, applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildClassCtor, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, checkValidAttributes, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getSlot, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, has, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, putProperty, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.mozilla.javascript.Scriptable
delete, delete, get, get, getDefaultValue, getIds, getParentScope, getPrototype, has, has, put, put, setParentScope, setPrototype
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
VARARGS_METHOD
private static final short VARARGS_METHOD
- See Also:
- Constant Field Values
-
VARARGS_CTOR
private static final short VARARGS_CTOR
- See Also:
- Constant Field Values
-
sawSecurityException
private static boolean sawSecurityException
-
JAVA_UNSUPPORTED_TYPE
public static final int JAVA_UNSUPPORTED_TYPE
- See Also:
- Constant Field Values
-
JAVA_STRING_TYPE
public static final int JAVA_STRING_TYPE
- See Also:
- Constant Field Values
-
JAVA_INT_TYPE
public static final int JAVA_INT_TYPE
- See Also:
- Constant Field Values
-
JAVA_BOOLEAN_TYPE
public static final int JAVA_BOOLEAN_TYPE
- See Also:
- Constant Field Values
-
JAVA_DOUBLE_TYPE
public static final int JAVA_DOUBLE_TYPE
- See Also:
- Constant Field Values
-
JAVA_SCRIPTABLE_TYPE
public static final int JAVA_SCRIPTABLE_TYPE
- See Also:
- Constant Field Values
-
JAVA_OBJECT_TYPE
public static final int JAVA_OBJECT_TYPE
- See Also:
- Constant Field Values
-
member
MemberBox member
-
functionName
private java.lang.String functionName
-
typeTags
private transient byte[] typeTags
-
parmsLength
private int parmsLength
-
hasVoidReturn
private transient boolean hasVoidReturn
-
returnTypeTag
private transient int returnTypeTag
-
isStatic
private boolean isStatic
-
-
Constructor Detail
-
FunctionObject
public FunctionObject(java.lang.String name, java.lang.reflect.Member methodOrConstructor, Scriptable scope)
Create a JavaScript function object from a Java method.The
member
argument must be either a java.lang.reflect.Method or a java.lang.reflect.Constructor and must match one of two forms.The first form is a member with zero or more parameters of the following types: Object, String, boolean, Scriptable, int, or double. The Long type is not supported because the double representation of a long (which is the EMCA-mandated storage type for Numbers) may lose precision. If the member is a Method, the return value must be void or one of the types allowed for parameters.
The runtime will perform appropriate conversions based upon the type of the parameter. A parameter type of Object specifies that no conversions are to be done. A parameter of type String will use Context.toString to convert arguments. Similarly, parameters of type double, boolean, and Scriptable will cause Context.toNumber, Context.toBoolean, and Context.toObject, respectively, to be called.
If the method is not static, the Java 'this' value will correspond to the JavaScript 'this' value. Any attempt to call the function with a 'this' value that is not of the right Java type will result in an error.
The second form is the variable arguments (or "varargs") form. If the FunctionObject will be used as a constructor, the member must have the following parameters
(Context cx, Object[] args, Function ctorObj, boolean inNewExpr)
and if it is a Method, be static and return an Object result.Otherwise, if the FunctionObject will not be used to define a constructor, the member must be a static Method with parameters
(Context cx, Scriptable thisObj, Object[] args, Function funObj)
and an Object result.When the function varargs form is called as part of a function call, the
args
parameter contains the arguments, withthisObj
set to the JavaScript 'this' value.funObj
is the function object for the invoked function.When the constructor varargs form is called or invoked while evaluating a
new
expression,args
contains the arguments,ctorObj
refers to this FunctionObject, andinNewExpr
is true if and only if anew
expression caused the call. This supports defining a function that has different behavior when called as a constructor than when invoked as a normal function call. (For example, the Boolean constructor, when called as a function, will convert to boolean rather than creating a new object.)- Parameters:
name
- the name of the functionmethodOrConstructor
- a java.lang.reflect.Method or a java.lang.reflect.Constructor that defines the objectscope
- enclosing scope of function- See Also:
Scriptable
-
-
Method Detail
-
getTypeTag
public static int getTypeTag(java.lang.Class<?> type)
- Returns:
- One of
JAVA_*_TYPE
constants to indicate desired type orJAVA_UNSUPPORTED_TYPE
if the convertion is not possible
-
convertArg
public static java.lang.Object convertArg(Context cx, Scriptable scope, java.lang.Object arg, int typeTag)
-
getArity
public int getArity()
Return the value defined by the method used to construct the object (number of parameters of the method, or 1 if the method is a "varargs" form).- Overrides:
getArity
in classBaseFunction
-
getLength
public int getLength()
Return the same value asgetArity()
.- Overrides:
getLength
in classBaseFunction
-
getFunctionName
public java.lang.String getFunctionName()
- Overrides:
getFunctionName
in classBaseFunction
-
getMethodOrConstructor
public java.lang.reflect.Member getMethodOrConstructor()
Get Java method or constructor this function represent.
-
findSingleMethod
static java.lang.reflect.Method findSingleMethod(java.lang.reflect.Method[] methods, java.lang.String name)
-
getMethodList
static java.lang.reflect.Method[] getMethodList(java.lang.Class<?> clazz)
Returns all public methods declared by the specified class. This excludes inherited methods.- Parameters:
clazz
- the class from which to pull public declared methods- Returns:
- the public methods declared in the specified class
- See Also:
Class.getDeclaredMethods()
-
addAsConstructor
public void addAsConstructor(Scriptable scope, Scriptable prototype)
Define this function as a JavaScript constructor.Sets up the "prototype" and "constructor" properties. Also calls setParent and setPrototype with appropriate values. Then adds the function object as a property of the given scope, using
prototype.getClassName()
as the name of the property.- Parameters:
scope
- the scope in which to define the constructor (typically the global object)prototype
- the prototype object- See Also:
Scriptable.setParentScope(org.mozilla.javascript.Scriptable)
,Scriptable.setPrototype(org.mozilla.javascript.Scriptable)
,Scriptable.getClassName()
-
initAsConstructor
void initAsConstructor(Scriptable scope, Scriptable prototype)
-
convertArg
@Deprecated public static java.lang.Object convertArg(Context cx, Scriptable scope, java.lang.Object arg, java.lang.Class<?> desired)
Deprecated.UsegetTypeTag(Class)
andconvertArg(Context, Scriptable, Object, int)
for type conversion.
-
call
public java.lang.Object call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Performs conversions on argument types if needed and invokes the underlying Java method or constructor.Implements Function.call.
- Specified by:
call
in interfaceCallable
- Specified by:
call
in interfaceFunction
- Overrides:
call
in classBaseFunction
- Parameters:
cx
- the current Context for this threadscope
- the scope to execute the function relative to. This is set to the value returned by getParentScope() except when the function is called from a closure.thisObj
- the JavaScriptthis
objectargs
- the array of arguments- Returns:
- the result of the call
- See Also:
Function.call( Context, Scriptable, Scriptable, Object[])
-
createObject
public Scriptable createObject(Context cx, Scriptable scope)
Return newScriptable
instance using the default constructor for the class of the underlying Java method. Return null to indicate that the call method should be used to create new objects.- Overrides:
createObject
in classBaseFunction
-
isVarArgsMethod
boolean isVarArgsMethod()
-
isVarArgsConstructor
boolean isVarArgsConstructor()
-
readObject
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException
- Throws:
java.io.IOException
java.lang.ClassNotFoundException
-
-