/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.nashorn.internal.runtime;
Describes attributes of a specific property of a script object.
/**
* Describes attributes of a specific property of a script object.
*/
public interface PropertyDescriptor {
Type: generic property descriptor - TODO this should be an enum /** Type: generic property descriptor - TODO this should be an enum */
public static final int GENERIC = 0;
Type: data property descriptor - TODO this should be an enum /** Type: data property descriptor - TODO this should be an enum */
public static final int DATA = 1;
Type: accessor property descriptor - TODO this should be an enum /** Type: accessor property descriptor - TODO this should be an enum */
public static final int ACCESSOR = 2;
descriptor for configurable property /** descriptor for configurable property */
public static final String CONFIGURABLE = "configurable";
descriptor for enumerable property /** descriptor for enumerable property */
public static final String ENUMERABLE = "enumerable";
descriptor for writable property /** descriptor for writable property */
public static final String WRITABLE = "writable";
descriptor for value /** descriptor for value */
public static final String VALUE = "value";
descriptor for getter /** descriptor for getter */
public static final String GET = "get";
descriptor for setter /** descriptor for setter */
public static final String SET = "set";
Check if this PropertyDescriptor
describes a configurable property Returns: true if configurable
/**
* Check if this {@code PropertyDescriptor} describes a configurable property
* @return true if configurable
*/
public boolean isConfigurable();
Check if this PropertyDescriptor
describes an enumerable property Returns: true if enumerable
/**
* Check if this {@code PropertyDescriptor} describes an enumerable property
* @return true if enumerable
*/
public boolean isEnumerable();
Check if this PropertyDescriptor
describes a wriable property Returns: true if writable
/**
* Check if this {@code PropertyDescriptor} describes a wriable property
* @return true if writable
*/
public boolean isWritable();
Get the property value as given by this PropertyDescriptor
Returns: property value
/**
* Get the property value as given by this {@code PropertyDescriptor}
* @return property value
*/
public Object getValue();
Get the UserAccessorProperty
getter as given by this PropertyDescriptor
Returns: getter, or null if not available
/**
* Get the {@link UserAccessorProperty} getter as given by this {@code PropertyDescriptor}
* @return getter, or null if not available
*/
public ScriptFunction getGetter();
Get the UserAccessorProperty
setter as given by this PropertyDescriptor
Returns: setter, or null if not available
/**
* Get the {@link UserAccessorProperty} setter as given by this {@code PropertyDescriptor}
* @return setter, or null if not available
*/
public ScriptFunction getSetter();
Set whether this PropertyDescriptor
describes a configurable property Params: - flag – true if configurable, false otherwise
/**
* Set whether this {@code PropertyDescriptor} describes a configurable property
* @param flag true if configurable, false otherwise
*/
public void setConfigurable(boolean flag);
Set whether this PropertyDescriptor
describes an enumerable property Params: - flag – true if enumerable, false otherwise
/**
* Set whether this {@code PropertyDescriptor} describes an enumerable property
* @param flag true if enumerable, false otherwise
*/
public void setEnumerable(boolean flag);
Set whether this PropertyDescriptor
describes a writable property Params: - flag – true if writable, false otherwise
/**
* Set whether this {@code PropertyDescriptor} describes a writable property
* @param flag true if writable, false otherwise
*/
public void setWritable(boolean flag);
Set the property value for this PropertyDescriptor
Params: - value – property value
/**
* Set the property value for this {@code PropertyDescriptor}
* @param value property value
*/
public void setValue(Object value);
Assign a UserAccessorProperty
getter as given to this PropertyDescriptor
Params: - getter – getter, or null if not available
/**
* Assign a {@link UserAccessorProperty} getter as given to this {@code PropertyDescriptor}
* @param getter getter, or null if not available
*/
public void setGetter(Object getter);
Assign a UserAccessorProperty
setter as given to this PropertyDescriptor
Params: - setter – setter, or null if not available
/**
* Assign a {@link UserAccessorProperty} setter as given to this {@code PropertyDescriptor}
* @param setter setter, or null if not available
*/
public void setSetter(Object setter);
Fill in this PropertyDescriptor
from the properties of a given ScriptObject
Params: - obj – the script object
Returns: filled in PropertyDescriptor
/**
* Fill in this {@code PropertyDescriptor} from the properties of a given {@link ScriptObject}
*
* @param obj the script object
* @return filled in {@code PropertyDescriptor}
*
*/
public PropertyDescriptor fillFrom(ScriptObject obj);
Get the type of this property descriptor.
Returns: property descriptor type, one of GENERIC
, DATA
and ACCESSOR
/**
* Get the type of this property descriptor.
* @return property descriptor type, one of {@link PropertyDescriptor#GENERIC}, {@link PropertyDescriptor#DATA} and {@link PropertyDescriptor#ACCESSOR}
*/
public int type();
Wrapper for ScriptObject.has(Object)
Params: - key – property key
Returns: true if property exists in implementor
/**
* Wrapper for {@link ScriptObject#has(Object)}
*
* @param key property key
* @return true if property exists in implementor
*/
public boolean has(Object key);
Check existence and compare attributes of descriptors.
Params: - otherDesc – other descriptor to compare to
Returns: true if every field of this descriptor exists in otherDesc and has the same value.
/**
* Check existence and compare attributes of descriptors.
* @param otherDesc other descriptor to compare to
* @return true if every field of this descriptor exists in otherDesc and has the same value.
*/
public boolean hasAndEquals(PropertyDescriptor otherDesc);
}