src/jdk/nashorn/api/scripting/AbstractJSObject.java

Mon, 05 Jan 2015 16:02:56 +0530

author
sundar
date
Mon, 05 Jan 2015 16:02:56 +0530
changeset 1212
0c0130c5ff1b
parent 0
b1a7da25b547
child 1250
9ee1fc3f6136
permissions
-rw-r--r--

8068431: @since and @jdk.Exported are missing in jdk.nashorn.api.scripting classes and package-info.java files
Reviewed-by: attila, lagergren

     1 /*
     2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 package jdk.nashorn.api.scripting;
    28 import java.util.Collection;
    29 import java.util.Collections;
    30 import java.util.Set;
    32 /**
    33  * This is the base class for nashorn ScriptObjectMirror class.
    34  *
    35  * This class can also be subclassed by an arbitrary Java class. Nashorn will
    36  * treat objects of such classes just like nashorn script objects. Usual nashorn
    37  * operations like obj[i], obj.foo, obj.func(), delete obj.foo will be glued
    38  * to appropriate method call of this class.
    39  *
    40  * @since 1.8u40
    41  */
    42 @jdk.Exported
    43 public abstract class AbstractJSObject implements JSObject {
    44     /**
    45      * Call this object as a JavaScript function. This is equivalent to
    46      * 'func.apply(thiz, args)' in JavaScript.
    47      *
    48      * @param thiz 'this' object to be passed to the function
    49      * @param args arguments to method
    50      * @return result of call
    51      */
    52     @Override
    53     public Object call(final Object thiz, final Object... args) {
    54         throw new UnsupportedOperationException("call");
    55     }
    57     /**
    58      * Call this 'constructor' JavaScript function to create a new object.
    59      * This is equivalent to 'new func(arg1, arg2...)' in JavaScript.
    60      *
    61      * @param args arguments to method
    62      * @return result of constructor call
    63      */
    64     @Override
    65     public Object newObject(final Object... args) {
    66         throw new UnsupportedOperationException("newObject");
    67     }
    69     /**
    70      * Evaluate a JavaScript expression.
    71      *
    72      * @param s JavaScript expression to evaluate
    73      * @return evaluation result
    74      */
    75     @Override
    76     public Object eval(final String s) {
    77         throw new UnsupportedOperationException("eval");
    78     }
    80     /**
    81      * Retrieves a named member of this JavaScript object.
    82      *
    83      * @param name of member
    84      * @return member
    85      */
    86     @Override
    87     public Object getMember(final String name) {
    88         return null;
    89     }
    91     /**
    92      * Retrieves an indexed member of this JavaScript object.
    93      *
    94      * @param index index slot to retrieve
    95      * @return member
    96      */
    97     @Override
    98     public Object getSlot(final int index) {
    99         return null;
   100     }
   102     /**
   103      * Does this object have a named member?
   104      *
   105      * @param name name of member
   106      * @return true if this object has a member of the given name
   107      */
   108     @Override
   109     public boolean hasMember(final String name) {
   110         return false;
   111     }
   113     /**
   114      * Does this object have a indexed property?
   115      *
   116      * @param slot index to check
   117      * @return true if this object has a slot
   118      */
   119     @Override
   120     public boolean hasSlot(final int slot) {
   121         return false;
   122     }
   124     /**
   125      * Remove a named member from this JavaScript object
   126      *
   127      * @param name name of the member
   128      */
   129     @Override
   130     public void removeMember(final String name) {
   131         //empty
   132     }
   134     /**
   135      * Set a named member in this JavaScript object
   136      *
   137      * @param name  name of the member
   138      * @param value value of the member
   139      */
   140     @Override
   141     public void setMember(final String name, final Object value) {
   142         //empty
   143     }
   145     /**
   146      * Set an indexed member in this JavaScript object
   147      *
   148      * @param index index of the member slot
   149      * @param value value of the member
   150      */
   151     @Override
   152     public void setSlot(final int index, final Object value) {
   153         //empty
   154     }
   156     // property and value iteration
   158     /**
   159      * Returns the set of all property names of this object.
   160      *
   161      * @return set of property names
   162      */
   163     @Override
   164     @SuppressWarnings("unchecked")
   165     public Set<String> keySet() {
   166         return Collections.EMPTY_SET;
   167     }
   169     /**
   170      * Returns the set of all property values of this object.
   171      *
   172      * @return set of property values.
   173      */
   174     @Override
   175     @SuppressWarnings("unchecked")
   176     public Collection<Object> values() {
   177         return Collections.EMPTY_SET;
   178     }
   180     // JavaScript instanceof check
   182     /**
   183      * Checking whether the given object is an instance of 'this' object.
   184      *
   185      * @param instance instace to check
   186      * @return true if the given 'instance' is an instance of this 'function' object
   187      */
   188     @Override
   189     public boolean isInstance(final Object instance) {
   190         return false;
   191     }
   193     /**
   194      * Checking whether this object is an instance of the given 'clazz' object.
   195      *
   196      * @param clazz clazz to check
   197      * @return true if this object is an instance of the given 'clazz'
   198      */
   199     @Override
   200     public boolean isInstanceOf(final Object clazz) {
   201         if (clazz instanceof JSObject) {
   202             return ((JSObject)clazz).isInstance(this);
   203         }
   205         return false;
   206     }
   208     /**
   209      * ECMA [[Class]] property
   210      *
   211      * @return ECMA [[Class]] property value of this object
   212      */
   213     @Override
   214     public String getClassName() {
   215         return getClass().getName();
   216     }
   218     /**
   219      * Is this a function object?
   220      *
   221      * @return if this mirror wraps a ECMAScript function instance
   222      */
   223     @Override
   224     public boolean isFunction() {
   225         return false;
   226     }
   228     /**
   229      * Is this a 'use strict' function object?
   230      *
   231      * @return true if this mirror represents a ECMAScript 'use strict' function
   232      */
   233     @Override
   234     public boolean isStrictFunction() {
   235         return false;
   236     }
   238     /**
   239      * Is this an array object?
   240      *
   241      * @return if this mirror wraps a ECMAScript array object
   242      */
   243     @Override
   244     public boolean isArray() {
   245         return false;
   246     }
   248     /**
   249      * Returns this object's numeric value.
   250      *
   251      * @return this object's numeric value.
   252      */
   253     @Override
   254     public double toNumber() {
   255         return Double.NaN;
   256     }
   257 }

mercurial