Class ScriptObjectMirror

    • Method Detail

      • equals

        public boolean equals​(Object other)
        Description copied from class: Object
        Indicates whether some other object is "equal to" this one.

        The equals method implements an equivalence relation on non-null object references:

        • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
        • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
        • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
        • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
        • For any non-null reference value x, x.equals(null) should return false.

        The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).

        Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

        Specified by:
        equals in interface Map<String,Object>
        Overrides:
        equals in class Object
        Parameters:
        other - the reference object with which to compare.
        Returns:
        true if this object is the same as the obj argument; false otherwise.
        See Also:
        Object.hashCode(), HashMap
      • hashCode

        public int hashCode​()
        Description copied from class: Object
        Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by HashMap.

        The general contract of hashCode is:

        • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
        • If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
        • It is not required that if two objects are unequal according to the Object.equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

        As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)

        Specified by:
        hashCode in interface Map<String,Object>
        Overrides:
        hashCode in class Object
        Returns:
        a hash code value for this object.
        See Also:
        Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
      • toString

        public String toString​()
        Description copied from class: Object
        Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

        The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

         getClass().getName() + '@' + Integer.toHexString(hashCode())
         
        Overrides:
        toString in class Object
        Returns:
        a string representation of the object.
      • call

        public Object call​(Object thiz,
                           Object... args)
        Description copied from interface: JSObject
        Call this object as a JavaScript function. This is equivalent to 'func.apply(thiz, args)' in JavaScript.
        Specified by:
        call in interface JSObject
        Overrides:
        call in class AbstractJSObject
        Parameters:
        thiz - 'this' object to be passed to the function. This may be null.
        args - arguments to method
        Returns:
        result of call
      • newObject

        public Object newObject​(Object... args)
        Description copied from interface: JSObject
        Call this 'constructor' JavaScript function to create a new object. This is equivalent to 'new func(arg1, arg2...)' in JavaScript.
        Specified by:
        newObject in interface JSObject
        Overrides:
        newObject in class AbstractJSObject
        Parameters:
        args - arguments to method
        Returns:
        result of constructor call
      • eval

        public Object eval​(String s)
        Description copied from interface: JSObject
        Evaluate a JavaScript expression.
        Specified by:
        eval in interface JSObject
        Overrides:
        eval in class AbstractJSObject
        Parameters:
        s - JavaScript expression to evaluate
        Returns:
        evaluation result
      • callMember

        public Object callMember​(String functionName,
                                 Object... args)
        Call member function
        Parameters:
        functionName - function name
        args - arguments
        Returns:
        return value of function
      • getSlot

        public Object getSlot​(int index)
        Description copied from interface: JSObject
        Retrieves an indexed member of this JavaScript object.
        Specified by:
        getSlot in interface JSObject
        Overrides:
        getSlot in class AbstractJSObject
        Parameters:
        index - index slot to retrieve
        Returns:
        member
      • hasMember

        public boolean hasMember​(String name)
        Description copied from interface: JSObject
        Does this object have a named member?
        Specified by:
        hasMember in interface JSObject
        Overrides:
        hasMember in class AbstractJSObject
        Parameters:
        name - name of member
        Returns:
        true if this object has a member of the given name
      • hasSlot

        public boolean hasSlot​(int slot)
        Description copied from interface: JSObject
        Does this object have a indexed property?
        Specified by:
        hasSlot in interface JSObject
        Overrides:
        hasSlot in class AbstractJSObject
        Parameters:
        slot - index to check
        Returns:
        true if this object has a slot
      • setMember

        public void setMember​(String name,
                              Object value)
        Description copied from interface: JSObject
        Set a named member in this JavaScript object
        Specified by:
        setMember in interface JSObject
        Overrides:
        setMember in class AbstractJSObject
        Parameters:
        name - name of the member
        value - value of the member
      • setSlot

        public void setSlot​(int index,
                            Object value)
        Description copied from interface: JSObject
        Set an indexed member in this JavaScript object
        Specified by:
        setSlot in interface JSObject
        Overrides:
        setSlot in class AbstractJSObject
        Parameters:
        index - index of the member slot
        value - value of the member
      • setIndexedPropertiesToExternalArrayData

        public void setIndexedPropertiesToExternalArrayData​(ByteBuffer buf)
        Nashorn extension: setIndexedPropertiesToExternalArrayData. set indexed properties be exposed from a given nio ByteBuffer.
        Parameters:
        buf - external buffer - should be a nio ByteBuffer
      • isInstance

        public boolean isInstance​(Object instance)
        Description copied from interface: JSObject
        Checking whether the given object is an instance of 'this' object.
        Specified by:
        isInstance in interface JSObject
        Overrides:
        isInstance in class AbstractJSObject
        Parameters:
        instance - instance to check
        Returns:
        true if the given 'instance' is an instance of this 'function' object
      • isFunction

        public boolean isFunction​()
        Description copied from interface: JSObject
        Is this a function object?
        Specified by:
        isFunction in interface JSObject
        Overrides:
        isFunction in class AbstractJSObject
        Returns:
        if this mirror wraps a ECMAScript function instance
      • isStrictFunction

        public boolean isStrictFunction​()
        Description copied from interface: JSObject
        Is this a 'use strict' function object?
        Specified by:
        isStrictFunction in interface JSObject
        Overrides:
        isStrictFunction in class AbstractJSObject
        Returns:
        true if this mirror represents a ECMAScript 'use strict' function
      • isArray

        public boolean isArray​()
        Description copied from interface: JSObject
        Is this an array object?
        Specified by:
        isArray in interface JSObject
        Overrides:
        isArray in class AbstractJSObject
        Returns:
        if this mirror wraps a ECMAScript array object
      • clear

        public void clear​()
        Description copied from interface: Map
        Removes all of the mappings from this map (optional operation). The map will be empty after this call returns.
        Specified by:
        clear in interface Map<String,Object>
      • containsKey

        public boolean containsKey​(Object key)
        Description copied from interface: Bindings
        Returns true if this map contains a mapping for the specified key. More formally, returns true if and only if this map contains a mapping for a key k such that (key==null ? k==null : key.equals(k)). (There can be at most one such mapping.)
        Specified by:
        containsKey in interface Bindings
        Specified by:
        containsKey in interface Map<String,Object>
        Parameters:
        key - key whose presence in this map is to be tested.
        Returns:
        true if this map contains a mapping for the specified key.
      • containsValue

        public boolean containsValue​(Object value)
        Description copied from interface: Map
        Returns true if this map maps one or more keys to the specified value. More formally, returns true if and only if this map contains at least one mapping to a value v such that Objects.equals(value, v). This operation will probably require time linear in the map size for most implementations of the Map interface.
        Specified by:
        containsValue in interface Map<String,Object>
        Parameters:
        value - value whose presence in this map is to be tested
        Returns:
        true if this map maps one or more keys to the specified value
      • entrySet

        public Set<Map.Entry<String,Object>> entrySet​()
        Description copied from interface: Map
        Returns a Set view of the mappings contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation, or through the setValue operation on a map entry returned by the iterator) the results of the iteration are undefined. The set supports element removal, which removes the corresponding mapping from the map, via the Iterator.remove, Set.remove, removeAll, retainAll and clear operations. It does not support the add or addAll operations.
        Specified by:
        entrySet in interface Map<String,Object>
        Returns:
        a set view of the mappings contained in this map
      • get

        public Object get​(Object key)
        Description copied from interface: Bindings
        Returns the value to which this map maps the specified key. Returns null if the map contains no mapping for this key. A return value of null does not necessarily indicate that the map contains no mapping for the key; it's also possible that the map explicitly maps the key to null. The containsKey operation may be used to distinguish these two cases.

        More formally, if this map contains a mapping from a key k to a value v such that (key==null ? k==null : key.equals(k)), then this method returns v; otherwise it returns null. (There can be at most one such mapping.)

        Specified by:
        get in interface Bindings
        Specified by:
        get in interface Map<String,Object>
        Parameters:
        key - key whose associated value is to be returned.
        Returns:
        the value to which this map maps the specified key, or null if the map contains no mapping for this key.
      • isEmpty

        public boolean isEmpty​()
        Description copied from interface: Map
        Returns true if this map contains no key-value mappings.
        Specified by:
        isEmpty in interface Map<String,Object>
        Returns:
        true if this map contains no key-value mappings
      • put

        public Object put​(String key,
                          Object value)
        Description copied from interface: Bindings
        Set a named value.
        Specified by:
        put in interface Bindings
        Specified by:
        put in interface Map<String,Object>
        Parameters:
        key - The name associated with the value.
        value - The value associated with the name.
        Returns:
        The value previously associated with the given name. Returns null if no value was previously associated with the name.
      • putAll

        public void putAll​(Map<? extends String,? extends Object> map)
        Description copied from interface: Bindings
        Adds all the mappings in a given Map to this Bindings.
        Specified by:
        putAll in interface Bindings
        Specified by:
        putAll in interface Map<String,Object>
        Parameters:
        map - The Map to merge with this one.
      • remove

        public Object remove​(Object key)
        Description copied from interface: Bindings
        Removes the mapping for this key from this map if it is present (optional operation). More formally, if this map contains a mapping from key k to value v such that (key==null ? k==null : key.equals(k)), that mapping is removed. (The map can contain at most one such mapping.)

        Returns the value to which the map previously associated the key, or null if the map contained no mapping for this key. (A null return can also indicate that the map previously associated null with the specified key if the implementation supports null values.) The map will not contain a mapping for the specified key once the call returns.

        Specified by:
        remove in interface Bindings
        Specified by:
        remove in interface Map<String,Object>
        Parameters:
        key - key whose mapping is to be removed from the map.
        Returns:
        previous value associated with specified key, or null if there was no mapping for key.
      • delete

        public boolean delete​(Object key)
        Delete a property from this object.
        Parameters:
        key - the property to be deleted
        Returns:
        if the delete was successful or not
      • size

        public int size​()
        Description copied from interface: Map
        Returns the number of key-value mappings in this map. If the map contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.
        Specified by:
        size in interface Map<String,Object>
        Returns:
        the number of key-value mappings in this map
      • getProto

        public Object getProto​()
        Return the __proto__ of this object.
        Returns:
        __proto__ object.
      • setProto

        public void setProto​(Object proto)
        Set the __proto__ of this object.
        Parameters:
        proto - new proto for this object
      • getOwnPropertyDescriptor

        public Object getOwnPropertyDescriptor​(String key)
        ECMA 8.12.1 [[GetOwnProperty]] (P)
        Parameters:
        key - property key
        Returns:
        Returns the Property Descriptor of the named own property of this object, or undefined if absent.
      • getOwnKeys

        public String[] getOwnKeys​(boolean all)
        return an array of own property keys associated with the object.
        Parameters:
        all - True if to include non-enumerable keys.
        Returns:
        Array of keys.
      • preventExtensions

        public ScriptObjectMirror preventExtensions​()
        Flag this script object as non extensible
        Returns:
        the object after being made non extensible
      • isExtensible

        public boolean isExtensible​()
        Check if this script object is extensible
        Returns:
        true if extensible
      • seal

        public ScriptObjectMirror seal​()
        ECMAScript 15.2.3.8 - seal implementation
        Returns:
        the sealed script object
      • isSealed

        public boolean isSealed​()
        Check whether this script object is sealed
        Returns:
        true if sealed
      • freeze

        public ScriptObjectMirror freeze​()
        ECMA 15.2.39 - freeze implementation. Freeze this script object
        Returns:
        the frozen script object
      • isFrozen

        public boolean isFrozen​()
        Check whether this script object is frozen
        Returns:
        true if frozen
      • isUndefined

        public static boolean isUndefined​(Object obj)
        Utility to check if given object is ECMAScript undefined value
        Parameters:
        obj - object to check
        Returns:
        true if 'obj' is ECMAScript undefined value
      • to

        public <T> T to​(Class<T> type)
        Utility to convert this script object to the given type.
        Type Parameters:
        T - destination type to convert to
        Parameters:
        type - destination type to convert to
        Returns:
        converted object
      • wrap

        public static Object wrap​(Object obj,
                                  Object homeGlobal)
        Make a script object mirror on given object if needed.
        Parameters:
        obj - object to be wrapped/converted
        homeGlobal - global to which this object belongs.
        Returns:
        wrapped/converted object
      • wrapAsJSONCompatible

        public static Object wrapAsJSONCompatible​(Object obj,
                                                  Object homeGlobal)
        Make a script object mirror on given object if needed. The created wrapper will implement the Java List interface if obj is a JavaScript Array object; this is compatible with Java JSON libraries expectations. Arrays retrieved through its properties (transitively) will also implement the list interface.
        Parameters:
        obj - object to be wrapped/converted
        homeGlobal - global to which this object belongs.
        Returns:
        wrapped/converted object
      • unwrap

        public static Object unwrap​(Object obj,
                                    Object homeGlobal)
        Unwrap a script object mirror if needed.
        Parameters:
        obj - object to be unwrapped
        homeGlobal - global to which this object belongs
        Returns:
        unwrapped object
      • wrapArray

        public static Object[] wrapArray​(Object[] args,
                                         Object homeGlobal)
        Wrap an array of object to script object mirrors if needed.
        Parameters:
        args - array to be unwrapped
        homeGlobal - global to which this object belongs
        Returns:
        wrapped array
      • unwrapArray

        public static Object[] unwrapArray​(Object[] args,
                                           Object homeGlobal)
        Unwrap an array of script object mirrors if needed.
        Parameters:
        args - array to be unwrapped
        homeGlobal - global to which this object belongs
        Returns:
        unwrapped array
      • identical

        public static boolean identical​(Object obj1,
                                        Object obj2)
        Are the given objects mirrors to same underlying object?
        Parameters:
        obj1 - first object
        obj2 - second object
        Returns:
        true if obj1 and obj2 are identical script objects or mirrors of it.
      • getDefaultValue

        public Object getDefaultValue​(Class<?> hint)
        Description copied from interface: JSObject
        Implements this object's [[DefaultValue]] method as per ECMAScript 5.1 section 8.6.2.
        Specified by:
        getDefaultValue in interface JSObject
        Parameters:
        hint - the type hint. Should be either null, Number.class or String.class.
        Returns:
        this object's default value.