org.mozilla.javascript
Class FunctionObject

java.lang.Object
  extended by org.mozilla.javascript.ScriptableObject
      extended by org.mozilla.javascript.IdScriptableObject
          extended by org.mozilla.javascript.BaseFunction
              extended by org.mozilla.javascript.FunctionObject
All Implemented Interfaces:
java.io.Serializable, Callable, org.mozilla.javascript.ConstProperties, org.mozilla.javascript.debug.DebuggableObject, Function, org.mozilla.javascript.IdFunctionCall, Scriptable

public class FunctionObject
extends org.mozilla.javascript.BaseFunction

See Also:
Serialized Form

Field Summary
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
           
 
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
FunctionObject(java.lang.String name, java.lang.reflect.Member methodOrConstructor, Scriptable scope)
          Create a JavaScript function object from a Java method.
 
Method Summary
 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, java.lang.Class desired)
          Deprecated. Use getTypeTag(Class) and convertArg(Context, Scriptable, Object, int) for type convertion.
static java.lang.Object convertArg(Context cx, Scriptable scope, java.lang.Object arg, int typeTag)
           
 Scriptable createObject(Context cx, Scriptable scope)
          Return new Scriptable instance using the default constructor for the class of the underlying Java method.
 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 as getArity().
 java.lang.reflect.Member getMethodOrConstructor()
          Get Java method or constructor this function represent.
static int getTypeTag(java.lang.Class type)
           
 
Methods inherited from class org.mozilla.javascript.BaseFunction
construct, execIdCall, fillConstructorProperties, findInstanceIdInfo, findPrototypeId, getClassName, getClassPrototype, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, hasInstance, initPrototypeId, setImmunePrototypeProperty, setInstanceIdValue
 
Methods inherited from class org.mozilla.javascript.IdScriptableObject
activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultPut, delete, exportAsJSClass, get, getAttributes, has, hasPrototypeMap, incompatibleCallError, initPrototypeConstructor, initPrototypeMethod, initPrototypeValue, instanceIdInfo, put, setAttributes
 
Methods inherited from class org.mozilla.javascript.ScriptableObject
associateValue, avoidObjectDetection, callMethod, callMethod, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, equivalentValues, get, getAllIds, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getFunctionPrototype, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getPropertyIds, getPrototype, getTopLevelScope, getTopScopeValue, has, hasProperty, hasProperty, isConst, isGetterOrSetter, isSealed, put, putConst, putConstProperty, putProperty, putProperty, redefineProperty, sealObject, setAttributes, setAttributes, setAttributes, setGetterOrSetter, setParentScope, setPrototype
 
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

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
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, with thisObj 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, and inNewExpr is true if and only if a new 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 function
methodOrConstructor - a java.lang.reflect.Method or a java.lang.reflect.Constructor that defines the object
scope - 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 or JAVA_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 class org.mozilla.javascript.BaseFunction

getLength

public int getLength()
Return the same value as getArity().

Overrides:
getLength in class org.mozilla.javascript.BaseFunction

getFunctionName

public java.lang.String getFunctionName()
Overrides:
getFunctionName in class org.mozilla.javascript.BaseFunction

getMethodOrConstructor

public java.lang.reflect.Member getMethodOrConstructor()
Get Java method or constructor this function represent.


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

convertArg

public static java.lang.Object convertArg(Context cx,
                                          Scriptable scope,
                                          java.lang.Object arg,
                                          java.lang.Class desired)
Deprecated. Use getTypeTag(Class) and convertArg(Context, Scriptable, Object, int) for type convertion.


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 interface Callable
Specified by:
call in interface Function
Overrides:
call in class org.mozilla.javascript.BaseFunction
Parameters:
cx - the current Context for this thread
scope - 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 JavaScript this object
args - 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 new Scriptable 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 class org.mozilla.javascript.BaseFunction