Class IdScriptableObject
- java.lang.Object
-
- org.mozilla.javascript.ScriptableObject
-
- org.mozilla.javascript.IdScriptableObject
-
- All Implemented Interfaces:
java.io.Serializable
,ConstProperties
,DebuggableObject
,IdFunctionCall
,Scriptable
,SymbolScriptable
- Direct Known Subclasses:
BaseFunction
,ES6Generator
,ES6Iterator
,NativeArray
,NativeArrayBuffer
,NativeArrayBufferView
,NativeCall
,NativeCallSite
,NativeConsole
,NativeContinuation
,NativeGenerator
,NativeIterator
,NativeMap
,NativeObject
,NativeRegExp
,NativeSet
,NativeSymbol
,NativeWeakMap
,NativeWeakSet
,TopLevel
,XMLObject
public abstract class IdScriptableObject extends ScriptableObject implements IdFunctionCall
Base class for native object implementation that uses IdFunctionObject to export its methods to script via <class-name>.prototype object.Any descendant should implement at least the following methods: findInstanceIdInfo getInstanceIdName execIdCall methodArity
To define non-function properties, the descendant should override getInstanceIdValue setInstanceIdValue to get/set property value and provide its default attributes.
To customize initialization of constructor and prototype objects, descendant may override scopeInit or fillConstructorProperties methods.
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.mozilla.javascript.ScriptableObject
ScriptableObject.KeyComparator
-
-
Field Summary
-
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 IdScriptableObject()
IdScriptableObject(Scriptable scope, Scriptable prototype)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
activatePrototypeMap(int maxPrototypeId)
protected void
addIdFunctionProperty(Scriptable obj, java.lang.Object tag, int id, java.lang.String name, int arity)
protected java.lang.Object
defaultGet(java.lang.String name)
protected boolean
defaultHas(java.lang.String name)
protected void
defaultPut(java.lang.String name, java.lang.Object value)
protected void
defineOwnProperty(Context cx, java.lang.Object key, ScriptableObject desc, boolean checkValid)
Defines a property on an object.void
delete(java.lang.String name)
Removes a named property from the object.void
delete(Symbol key)
Removes an object like the others, but using a Symbol as the key.protected static <T> T
ensureType(java.lang.Object obj, java.lang.Class<T> clazz, IdFunctionObject f)
Utility method to check the type and do the cast or throw an incompatible call error.java.lang.Object
execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable should be returned.IdFunctionObject
exportAsJSClass(int maxPrototypeId, Scriptable scope, boolean sealed)
protected void
fillConstructorProperties(IdFunctionObject ctor)
protected int
findInstanceIdInfo(java.lang.String name)
Map name to id of instance property.protected int
findInstanceIdInfo(Symbol key)
Map name to id of instance property.protected int
findPrototypeId(java.lang.String name)
protected int
findPrototypeId(Symbol key)
java.lang.Object
get(java.lang.String name, Scriptable start)
Returns the value of the named property or NOT_FOUND.java.lang.Object
get(Symbol key, Scriptable start)
Another version of Get that supports Symbol keyed properties.int
getAttributes(java.lang.String name)
Get the attributes of a named property.int
getAttributes(Symbol key)
protected java.lang.String
getInstanceIdName(int id)
Map id back to property name it defines.protected java.lang.Object
getInstanceIdValue(int id)
Get id value.protected int
getMaxInstanceId()
Get maximum id findInstanceIdInfo can generate.protected ScriptableObject
getOwnPropertyDescriptor(Context cx, java.lang.Object id)
boolean
has(java.lang.String name, Scriptable start)
Returns true if the named property is defined.boolean
has(Symbol key, Scriptable start)
A version of "has" that supports symbols.boolean
hasPrototypeMap()
void
initPrototypeConstructor(IdFunctionObject f)
protected void
initPrototypeId(int id)
IdFunctionObject
initPrototypeMethod(java.lang.Object tag, int id, java.lang.String name, int arity)
IdFunctionObject
initPrototypeMethod(java.lang.Object tag, int id, java.lang.String propertyName, java.lang.String functionName, int arity)
IdFunctionObject
initPrototypeMethod(java.lang.Object tag, int id, Symbol key, java.lang.String functionName, int arity)
void
initPrototypeValue(int id, java.lang.String name, java.lang.Object value, int attributes)
void
initPrototypeValue(int id, Symbol key, java.lang.Object value, int attributes)
protected static int
instanceIdInfo(int attributes, int id)
void
put(java.lang.String name, Scriptable start, java.lang.Object value)
Sets the value of the named property, creating it if need be.void
put(Symbol key, Scriptable start, java.lang.Object value)
Implementation of put required by SymbolScriptable objects.void
setAttributes(java.lang.String name, int attributes)
Set the attributes of a named property.protected void
setInstanceIdAttributes(int id, int attr)
Update the attributes of the given instance property.protected void
setInstanceIdValue(int id, java.lang.Object value)
Set or delete id value.-
Methods inherited from class org.mozilla.javascript.ScriptableObject
applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassName, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, getTypeOf, has, hasInstance, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, putProperty, querySlot, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setCommonDescriptorProperties, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size
-
-
-
-
Constructor Detail
-
IdScriptableObject
public IdScriptableObject()
-
IdScriptableObject
public IdScriptableObject(Scriptable scope, Scriptable prototype)
-
-
Method Detail
-
defaultHas
protected final boolean defaultHas(java.lang.String name)
-
defaultGet
protected final java.lang.Object defaultGet(java.lang.String name)
-
defaultPut
protected final void defaultPut(java.lang.String name, java.lang.Object value)
-
has
public boolean has(java.lang.String name, Scriptable start)
Description copied from class:ScriptableObject
Returns true if the named property is defined.- Specified by:
has
in interfaceScriptable
- Overrides:
has
in classScriptableObject
- Parameters:
name
- the name of the propertystart
- the object in which the lookup began- Returns:
- true if and only if the property was found in the object
- See Also:
Scriptable.get(String, Scriptable)
,ScriptableObject.getProperty(Scriptable, String)
-
has
public boolean has(Symbol key, Scriptable start)
Description copied from class:ScriptableObject
A version of "has" that supports symbols.- Specified by:
has
in interfaceSymbolScriptable
- Overrides:
has
in classScriptableObject
-
get
public java.lang.Object get(java.lang.String name, Scriptable start)
Description copied from class:ScriptableObject
Returns the value of the named property or NOT_FOUND.If the property was created using defineProperty, the appropriate getter method is called.
- Specified by:
get
in interfaceScriptable
- Overrides:
get
in classScriptableObject
- Parameters:
name
- the name of the propertystart
- the object in which the lookup began- Returns:
- the value of the property (may be null), or NOT_FOUND
- See Also:
Context.getUndefinedValue()
-
get
public java.lang.Object get(Symbol key, Scriptable start)
Description copied from class:ScriptableObject
Another version of Get that supports Symbol keyed properties.- Specified by:
get
in interfaceSymbolScriptable
- Overrides:
get
in classScriptableObject
-
put
public void put(java.lang.String name, Scriptable start, java.lang.Object value)
Description copied from class:ScriptableObject
Sets the value of the named property, creating it if need be.If the property was created using defineProperty, the appropriate setter method is called.
If the property's attributes include READONLY, no action is taken. This method will actually set the property in the start object.
- Specified by:
put
in interfaceScriptable
- Overrides:
put
in classScriptableObject
- Parameters:
name
- the name of the propertystart
- the object whose property is being setvalue
- value to set the property to- See Also:
Scriptable.has(String, Scriptable)
,Scriptable.get(String, Scriptable)
,ScriptableObject.putProperty(Scriptable, String, Object)
,Context.toObject(Object, Scriptable)
-
put
public void put(Symbol key, Scriptable start, java.lang.Object value)
Description copied from class:ScriptableObject
Implementation of put required by SymbolScriptable objects.- Specified by:
put
in interfaceSymbolScriptable
- Overrides:
put
in classScriptableObject
-
delete
public void delete(java.lang.String name)
Description copied from class:ScriptableObject
Removes a named property from the object.If the property is not found, or it has the PERMANENT attribute, no action is taken.
- Specified by:
delete
in interfaceScriptable
- Overrides:
delete
in classScriptableObject
- Parameters:
name
- the name of the property- See Also:
Scriptable.get(String, Scriptable)
,ScriptableObject.deleteProperty(Scriptable, String)
-
delete
public void delete(Symbol key)
Description copied from class:ScriptableObject
Removes an object like the others, but using a Symbol as the key.- Specified by:
delete
in interfaceSymbolScriptable
- Overrides:
delete
in classScriptableObject
-
getAttributes
public int getAttributes(java.lang.String name)
Description copied from class:ScriptableObject
Get the attributes of a named property.The property is specified by
name
as defined forhas
.- Overrides:
getAttributes
in classScriptableObject
- Parameters:
name
- the identifier for the property- Returns:
- the bitset of attributes
- See Also:
ScriptableObject.has(String, Scriptable)
,ScriptableObject.READONLY
,ScriptableObject.DONTENUM
,ScriptableObject.PERMANENT
,ScriptableObject.EMPTY
-
getAttributes
public int getAttributes(Symbol key)
- Overrides:
getAttributes
in classScriptableObject
-
setAttributes
public void setAttributes(java.lang.String name, int attributes)
Description copied from class:ScriptableObject
Set the attributes of a named property.The property is specified by
name
as defined forhas
.The possible attributes are READONLY, DONTENUM, and PERMANENT. Combinations of attributes are expressed by the bitwise OR of attributes. EMPTY is the state of no attributes set. Any unused bits are reserved for future use.
- Overrides:
setAttributes
in classScriptableObject
- Parameters:
name
- the name of the propertyattributes
- the bitset of attributes- See Also:
Scriptable.has(String, Scriptable)
,ScriptableObject.READONLY
,ScriptableObject.DONTENUM
,ScriptableObject.PERMANENT
,ScriptableObject.EMPTY
-
getMaxInstanceId
protected int getMaxInstanceId()
Get maximum id findInstanceIdInfo can generate.
-
instanceIdInfo
protected static int instanceIdInfo(int attributes, int id)
-
findInstanceIdInfo
protected int findInstanceIdInfo(java.lang.String name)
Map name to id of instance property. Should return 0 if not found or the result ofinstanceIdInfo(int, int)
.
-
findInstanceIdInfo
protected int findInstanceIdInfo(Symbol key)
Map name to id of instance property. Should return 0 if not found or the result ofinstanceIdInfo(int, int)
.
-
getInstanceIdName
protected java.lang.String getInstanceIdName(int id)
Map id back to property name it defines.
-
getInstanceIdValue
protected java.lang.Object getInstanceIdValue(int id)
Get id value. * If id value is constant, descendant can call cacheIdValue to store * value in the permanent cache. * Default implementation creates IdFunctionObject instance for given id * and cache its value
-
setInstanceIdValue
protected void setInstanceIdValue(int id, java.lang.Object value)
Set or delete id value. If value == NOT_FOUND , the implementation should make sure that the following getInstanceIdValue return NOT_FOUND.
-
setInstanceIdAttributes
protected void setInstanceIdAttributes(int id, int attr)
Update the attributes of the given instance property. Classes which want to support changing property attributes via Object.defineProperty must override this method. The default implementation throws InternalError.- Parameters:
id
- the instance property idattr
- the new attribute bitset
-
execIdCall
public java.lang.Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable should be returned.- Specified by:
execIdCall
in interfaceIdFunctionCall
-
exportAsJSClass
public final IdFunctionObject exportAsJSClass(int maxPrototypeId, Scriptable scope, boolean sealed)
-
hasPrototypeMap
public final boolean hasPrototypeMap()
-
activatePrototypeMap
public final void activatePrototypeMap(int maxPrototypeId)
-
initPrototypeMethod
public final IdFunctionObject initPrototypeMethod(java.lang.Object tag, int id, java.lang.String name, int arity)
-
initPrototypeMethod
public final IdFunctionObject initPrototypeMethod(java.lang.Object tag, int id, java.lang.String propertyName, java.lang.String functionName, int arity)
-
initPrototypeMethod
public final IdFunctionObject initPrototypeMethod(java.lang.Object tag, int id, Symbol key, java.lang.String functionName, int arity)
-
initPrototypeConstructor
public final void initPrototypeConstructor(IdFunctionObject f)
-
initPrototypeValue
public final void initPrototypeValue(int id, java.lang.String name, java.lang.Object value, int attributes)
-
initPrototypeValue
public final void initPrototypeValue(int id, Symbol key, java.lang.Object value, int attributes)
-
initPrototypeId
protected void initPrototypeId(int id)
-
findPrototypeId
protected int findPrototypeId(java.lang.String name)
-
findPrototypeId
protected int findPrototypeId(Symbol key)
-
fillConstructorProperties
protected void fillConstructorProperties(IdFunctionObject ctor)
-
addIdFunctionProperty
protected void addIdFunctionProperty(Scriptable obj, java.lang.Object tag, int id, java.lang.String name, int arity)
-
ensureType
protected static <T> T ensureType(java.lang.Object obj, java.lang.Class<T> clazz, IdFunctionObject f)
Utility method to check the type and do the cast or throw an incompatible call error. Possible usage would be to have a private function like realThis:private static NativeSomething realThis(Scriptable thisObj, IdFunctionObject f) { return ensureType(thisObj, NativeSomething.class, f); }
- Parameters:
obj
- the object to check/castclazz
- the target typef
- function that is attempting to convert 'this' object.- Returns:
- obj casted to the target type
- Throws:
EcmaError
- if the cast failed.
-
defineOwnProperty
protected void defineOwnProperty(Context cx, java.lang.Object key, ScriptableObject desc, boolean checkValid)
Description copied from class:ScriptableObject
Defines a property on an object.Based on [[DefineOwnProperty]] from 8.12.10 of the spec.
- Overrides:
defineOwnProperty
in classScriptableObject
- Parameters:
cx
- the current Contextkey
- the name/index of the propertydesc
- the new property descriptor, as described in 8.6.1checkValid
- whether to perform validity checks
-
getOwnPropertyDescriptor
protected ScriptableObject getOwnPropertyDescriptor(Context cx, java.lang.Object id)
- Overrides:
getOwnPropertyDescriptor
in classScriptableObject
-
-