public class Context
extends java.lang.Object
call(ContextAction)
or enter()
methods.Different forms of script execution are supported. Scripts may be evaluated from the source directly, or first compiled and then later executed. Interactive execution is also supported.
Some aspects of script execution, such as type conversions and object creation, may be accessed directly through methods of Context.
Scriptable
Modifier and Type | Class and Description |
---|---|
static interface |
Context.ClassShutterSetter |
Modifier and Type | Field and Description |
---|---|
static java.lang.Object[] |
emptyArgs
Convenient value to use as zero-length array of objects.
|
static java.lang.String |
errorReporterProperty |
static int |
FEATURE_DYNAMIC_SCOPE
Control if dynamic scope should be used for name access.
|
static int |
FEATURE_E4X
Control if support for E4X(ECMAScript for XML) extension is available.
|
static int |
FEATURE_ENHANCED_JAVA_ACCESS
Enables enhanced access to Java.
|
static int |
FEATURE_LOCATION_INFORMATION_IN_ERROR
When the feature is on Rhino will add a "fileName" and "lineNumber"
properties to Error objects automatically.
|
static int |
FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME
Control if member expression as function name extension is available.
|
static int |
FEATURE_NON_ECMA_GET_YEAR
Controls behaviour of Date.prototype.getYear().
|
static int |
FEATURE_PARENT_PROTO_PROPERTIES
Control if properties __proto__ and __parent__
are treated specially.
|
static int |
FEATURE_PARENT_PROTO_PROPRTIES
Deprecated.
In previous releases, this name was given to
FEATURE_PARENT_PROTO_PROPERTIES.
|
static int |
FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER
Control if reserved keywords are treated as identifiers.
|
static int |
FEATURE_STRICT_EVAL
Control if strict eval mode is enabled.
|
static int |
FEATURE_STRICT_MODE
Controls whether JS 1.5 'strict mode' is enabled.
|
static int |
FEATURE_STRICT_VARS
Control if strict variable mode is enabled.
|
static int |
FEATURE_TO_STRING_AS_SOURCE
Control if toString() should returns the same result
as toSource() when applied to objects and arrays.
|
static int |
FEATURE_WARNING_AS_ERROR
Controls whether a warning should be treated as an error.
|
boolean |
generateObserverCount |
static java.lang.String |
languageVersionProperty |
static int |
VERSION_1_0
JavaScript 1.0
|
static int |
VERSION_1_1
JavaScript 1.1
|
static int |
VERSION_1_2
JavaScript 1.2
|
static int |
VERSION_1_3
JavaScript 1.3
|
static int |
VERSION_1_4
JavaScript 1.4
|
static int |
VERSION_1_5
JavaScript 1.5
|
static int |
VERSION_1_6
JavaScript 1.6
|
static int |
VERSION_1_7
JavaScript 1.7
|
static int |
VERSION_1_8
JavaScript 1.8
|
static int |
VERSION_DEFAULT
The default version.
|
static int |
VERSION_UNKNOWN
The unknown version.
|
Modifier | Constructor and Description |
---|---|
|
Context()
Deprecated.
this constructor is deprecated because it creates a
dependency on a static singleton context factory. Use
ContextFactory.enter() or
ContextFactory.call(ContextAction) instead. If you subclass
this class, consider using Context(ContextFactory) constructor
instead in the subclasses' constructors. |
protected |
Context(ContextFactory factory)
Creates a new context.
|
Modifier and Type | Method and Description |
---|---|
void |
addActivationName(java.lang.String name)
Add a name to the list of names forcing the creation of real
activation objects for functions.
|
static void |
addContextListener(ContextListener listener)
Deprecated.
|
void |
addPropertyChangeListener(java.beans.PropertyChangeListener l)
Register an object to receive notifications when a bound property
has changed
|
static java.lang.Object |
call(ContextAction action)
Deprecated.
use
ContextFactory.call(ContextAction) instead as
this method relies on usage of a static singleton "global"
ContextFactory. |
static java.lang.Object |
call(ContextFactory factory,
Callable callable,
Scriptable scope,
Scriptable thisObj,
java.lang.Object[] args)
Call
Callable.call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
using the Context instance associated with the current thread. |
java.lang.Object |
callFunctionWithContinuations(Callable function,
Scriptable scope,
java.lang.Object[] args)
Call function that may pause execution by capturing a continuation.
|
ContinuationPending |
captureContinuation()
Capture a continuation from the current execution.
|
static void |
checkLanguageVersion(int version) |
static void |
checkOptimizationLevel(int optimizationLevel) |
Function |
compileFunction(Scriptable scope,
java.lang.String source,
java.lang.String sourceName,
int lineno,
java.lang.Object securityDomain)
Compile a JavaScript function.
|
Script |
compileReader(java.io.Reader in,
java.lang.String sourceName,
int lineno,
java.lang.Object securityDomain)
Compiles the source in the given reader.
|
Script |
compileReader(Scriptable scope,
java.io.Reader in,
java.lang.String sourceName,
int lineno,
java.lang.Object securityDomain)
Deprecated.
|
Script |
compileString(java.lang.String source,
java.lang.String sourceName,
int lineno,
java.lang.Object securityDomain)
Compiles the source in the given string.
|
GeneratedClassLoader |
createClassLoader(java.lang.ClassLoader parent)
Create class loader for generated classes.
|
java.lang.String |
decompileFunction(Function fun,
int indent)
Decompile a JavaScript Function.
|
java.lang.String |
decompileFunctionBody(Function fun,
int indent)
Decompile the body of a JavaScript Function.
|
java.lang.String |
decompileScript(Script script,
int indent)
Decompile the script.
|
static Context |
enter()
Same as calling
ContextFactory.enterContext() on the global
ContextFactory instance. |
static Context |
enter(Context cx)
Deprecated.
use
ContextFactory.enterContext(Context) instead as
this method relies on usage of a static singleton "global" ContextFactory. |
java.lang.Object |
evaluateReader(Scriptable scope,
java.io.Reader in,
java.lang.String sourceName,
int lineno,
java.lang.Object securityDomain)
Evaluate a reader as JavaScript source.
|
java.lang.Object |
evaluateString(Scriptable scope,
java.lang.String source,
java.lang.String sourceName,
int lineno,
java.lang.Object securityDomain)
Evaluate a JavaScript source string.
|
java.lang.Object |
executeScriptWithContinuations(Script script,
Scriptable scope)
Execute script that may pause execution by capturing a continuation.
|
static void |
exit()
Exit a block of code requiring a Context.
|
java.lang.ClassLoader |
getApplicationClassLoader() |
Context.ClassShutterSetter |
getClassShutterSetter() |
static Context |
getCurrentContext()
Get the current Context.
|
static DebuggableScript |
getDebuggableView(Script script)
Return DebuggableScript instance if any associated with the script.
|
Debugger |
getDebugger()
Return the current debugger.
|
java.lang.Object |
getDebuggerContextData()
Return the debugger context data associated with current context.
|
XMLLib.Factory |
getE4xImplementationFactory()
Returns an object which specifies an E4X implementation to use within
this
Context . |
java.lang.Object[] |
getElements(Scriptable object)
Get the elements of a JavaScript array.
|
ErrorReporter |
getErrorReporter()
Get the current error reporter.
|
ContextFactory |
getFactory()
Return
ContextFactory instance used to create this Context. |
java.lang.String |
getImplementationVersion()
Get the implementation version.
|
int |
getInstructionObserverThreshold()
Get threshold of executed instructions counter that triggers call to
observeInstructionCount() . |
int |
getLanguageVersion()
Get the current language version.
|
java.util.Locale |
getLocale()
Get the current locale.
|
int |
getMaximumInterpreterStackDepth()
Returns the maximum stack depth (in terms of number of call frames)
allowed in a single invocation of interpreter.
|
int |
getOptimizationLevel()
Get the current optimization level.
|
java.lang.Object |
getThreadLocal(java.lang.Object key)
Get a value corresponding to a key.
|
static java.lang.Object |
getUndefinedValue()
Get the singleton object that represents the JavaScript Undefined value.
|
WrapFactory |
getWrapFactory()
Return the current WrapFactory, or null if none is defined.
|
boolean |
hasFeature(int featureIndex)
Controls certain aspects of script semantics.
|
ScriptableObject |
initStandardObjects()
Initialize the standard objects.
|
Scriptable |
initStandardObjects(ScriptableObject scope)
Initialize the standard objects.
|
ScriptableObject |
initStandardObjects(ScriptableObject scope,
boolean sealed)
Initialize the standard objects.
|
boolean |
isActivationNeeded(java.lang.String name)
Check whether the name is in the list of names of objects
forcing the creation of activation objects.
|
boolean |
isGeneratingDebug()
Tell whether debug information is being generated.
|
boolean |
isGeneratingDebugChanged() |
boolean |
isGeneratingSource()
Tell whether source information is being generated.
|
boolean |
isSealed()
Checks if this is a sealed Context.
|
static boolean |
isValidLanguageVersion(int version) |
static boolean |
isValidOptimizationLevel(int optimizationLevel) |
static java.lang.Object |
javaToJS(java.lang.Object value,
Scriptable scope)
Convenient method to convert java value to its closest representation
in JavaScript.
|
static java.lang.Object |
jsToJava(java.lang.Object value,
java.lang.Class<?> desiredType)
Convert a JavaScript value into the desired type.
|
Scriptable |
newArray(Scriptable scope,
int length)
Create an array with a specified initial length.
|
Scriptable |
newArray(Scriptable scope,
java.lang.Object[] elements)
Create an array with a set of initial elements.
|
Scriptable |
newObject(Scriptable scope)
Create a new JavaScript object.
|
Scriptable |
newObject(Scriptable scope,
java.lang.String constructorName)
Create a new JavaScript object by executing the named constructor.
|
Scriptable |
newObject(Scriptable scope,
java.lang.String constructorName,
java.lang.Object[] args)
Creates a new JavaScript object by executing the named constructor.
|
protected void |
observeInstructionCount(int instructionCount)
Allow application to monitor counter of executed script instructions
in Context subclasses.
|
void |
putThreadLocal(java.lang.Object key,
java.lang.Object value)
Put a value that can later be retrieved using a given key.
|
void |
removeActivationName(java.lang.String name)
Remove a name from the list of names forcing the creation of real
activation objects for functions.
|
static void |
removeContextListener(ContextListener listener)
Deprecated.
|
void |
removePropertyChangeListener(java.beans.PropertyChangeListener l)
Remove an object from the list of objects registered to receive
notification of changes to a bounded property
|
void |
removeThreadLocal(java.lang.Object key)
Remove values from thread-local storage.
|
static void |
reportError(java.lang.String message)
Report an error using the error reporter for the current thread.
|
static void |
reportError(java.lang.String message,
java.lang.String sourceName,
int lineno,
java.lang.String lineSource,
int lineOffset)
Report an error using the error reporter for the current thread.
|
static EvaluatorException |
reportRuntimeError(java.lang.String message)
Report a runtime error using the error reporter for the current thread.
|
static EvaluatorException |
reportRuntimeError(java.lang.String message,
java.lang.String sourceName,
int lineno,
java.lang.String lineSource,
int lineOffset)
Report a runtime error using the error reporter for the current thread.
|
static void |
reportWarning(java.lang.String message)
Report a warning using the error reporter for the current thread.
|
static void |
reportWarning(java.lang.String message,
java.lang.String sourceName,
int lineno,
java.lang.String lineSource,
int lineOffset)
Report a warning using the error reporter for the current thread.
|
static void |
reportWarning(java.lang.String message,
java.lang.Throwable t) |
java.lang.Object |
resumeContinuation(java.lang.Object continuation,
Scriptable scope,
java.lang.Object functionResult)
Restarts execution of the JavaScript suspended at the call
to
captureContinuation() . |
void |
seal(java.lang.Object sealKey)
|
void |
setApplicationClassLoader(java.lang.ClassLoader loader) |
static void |
setCachingEnabled(boolean cachingEnabled)
Deprecated.
|
void |
setClassShutter(ClassShutter shutter)
Set the LiveConnect access filter for this context.
|
void |
setDebugger(Debugger debugger,
java.lang.Object contextData)
Set the associated debugger.
|
ErrorReporter |
setErrorReporter(ErrorReporter reporter)
Change the current error reporter.
|
void |
setGenerateObserverCount(boolean generateObserverCount)
Turn on or off generation of code with callbacks to
track the count of executed instructions.
|
void |
setGeneratingDebug(boolean generatingDebug)
Specify whether or not debug information should be generated.
|
void |
setGeneratingSource(boolean generatingSource)
Specify whether or not source information should be generated.
|
void |
setInstructionObserverThreshold(int threshold)
Set threshold of executed instructions counter that triggers call to
observeInstructionCount() . |
void |
setLanguageVersion(int version)
Set the language version.
|
java.util.Locale |
setLocale(java.util.Locale loc)
Set the current locale.
|
void |
setMaximumInterpreterStackDepth(int max)
Sets the maximum stack depth (in terms of number of call frames)
allowed in a single invocation of interpreter.
|
void |
setOptimizationLevel(int optimizationLevel)
Set the current optimization level.
|
void |
setSecurityController(SecurityController controller)
Set the security controller for this context.
|
void |
setWrapFactory(WrapFactory wrapFactory)
Set a WrapFactory for this Context.
|
boolean |
stringIsCompilableUnit(java.lang.String source)
Check whether a string is ready to be compiled.
|
static java.lang.RuntimeException |
throwAsScriptRuntimeEx(java.lang.Throwable e)
Rethrow the exception wrapping it as the script runtime exception.
|
static boolean |
toBoolean(java.lang.Object value)
Convert the value to a JavaScript boolean value.
|
static double |
toNumber(java.lang.Object value)
Convert the value to a JavaScript Number value.
|
static Scriptable |
toObject(java.lang.Object value,
Scriptable scope)
Convert the value to an JavaScript object value.
|
static Scriptable |
toObject(java.lang.Object value,
Scriptable scope,
java.lang.Class<?> staticType)
Deprecated.
|
static java.lang.String |
toString(java.lang.Object value)
Convert the value to a JavaScript String value.
|
static java.lang.Object |
toType(java.lang.Object value,
java.lang.Class<?> desiredType)
Deprecated.
|
void |
unseal(java.lang.Object sealKey)
Unseal previously sealed Context object.
|
public static final int VERSION_UNKNOWN
public static final int VERSION_DEFAULT
public static final int VERSION_1_0
public static final int VERSION_1_1
public static final int VERSION_1_2
public static final int VERSION_1_3
public static final int VERSION_1_4
public static final int VERSION_1_5
public static final int VERSION_1_6
public static final int VERSION_1_7
public static final int VERSION_1_8
public static final int FEATURE_NON_ECMA_GET_YEAR
hasFeature(int)
is always to subtruct
1900 as rquired by ECMAScript B.2.4.public static final int FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME
hasFeature(int)
returns false.public static final int FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER
hasFeature(int)
returns false.public static final int FEATURE_TO_STRING_AS_SOURCE
Scriptable.getClassName()
].
By default hasFeature(int)
returns true only if
the current JS version is set to VERSION_1_2
.
public static final int FEATURE_PARENT_PROTO_PROPERTIES
The properties allow to query and set scope and prototype chains for the
objects. The special meaning of the properties is available
only when they are used as the right hand side of the dot operator.
For example, while x.__proto__ = y changes the prototype
chain of the object x to point to y,
x["__proto__"] = y simply assigns a new value to the property
__proto__ in x even when the feature is on.
By default hasFeature(int)
returns true.
public static final int FEATURE_PARENT_PROTO_PROPRTIES
public static final int FEATURE_E4X
By default hasFeature(int)
returns true if
the current JS version is set to VERSION_DEFAULT
or is at least VERSION_1_6
.
public static final int FEATURE_DYNAMIC_SCOPE
This is useful to define shared scope containing functions that can be called from scripts and functions using private scopes.
By default hasFeature(int)
returns false.
public static final int FEATURE_STRICT_VARS
By default hasFeature(int)
returns false.
public static final int FEATURE_STRICT_EVAL
By default hasFeature(int)
returns false.
public static final int FEATURE_LOCATION_INFORMATION_IN_ERROR
By default hasFeature(int)
returns false.
public static final int FEATURE_STRICT_MODE
By default hasFeature(int)
returns false.
public static final int FEATURE_WARNING_AS_ERROR
public static final int FEATURE_ENHANCED_JAVA_ACCESS
Note that this feature should only be enabled for trusted scripts.
By default hasFeature(int)
returns false.
public static final java.lang.String languageVersionProperty
public static final java.lang.String errorReporterProperty
public static final java.lang.Object[] emptyArgs
public boolean generateObserverCount
public Context()
ContextFactory.enter()
or
ContextFactory.call(ContextAction)
instead. If you subclass
this class, consider using Context(ContextFactory)
constructor
instead in the subclasses' constructors.global context factory
.
Note that the Context must be associated with a thread before
it can be used to execute a script.protected Context(ContextFactory factory)
factory
- the context factory associated with this context (most
likely, the one that created the context). Can not be null. The context
features are inherited from the factory, and the context will also
otherwise use its factory's services.java.lang.IllegalArgumentException
- if factory parameter is null.public static Context getCurrentContext()
ContextFactory.enterContext()
,
ContextFactory.call(ContextAction)
public static Context enter()
ContextFactory.enterContext()
on the global
ContextFactory instance.getCurrentContext()
,
exit()
,
call(ContextAction)
public static Context enter(Context cx)
ContextFactory.enterContext(Context)
instead as
this method relies on usage of a static singleton "global" ContextFactory.
The same as enter()
except that cx
is associated with the current thread and returned if
the current thread has no associated context and cx
is not associated with any other thread.
cx
- a Context to associate with the thread if possibleContextFactory.enterContext(Context)
,
ContextFactory.call(ContextAction)
public static void exit()
exit()
will remove the association between
the current thread and a Context if the prior call to
ContextFactory.enterContext()
on this thread newly associated a
Context with this thread. Once the current thread no longer has an
associated Context, it cannot be used to execute JavaScript until it is
again associated with a Context.ContextFactory.enterContext()
public static java.lang.Object call(ContextAction action)
ContextFactory.call(ContextAction)
instead as
this method relies on usage of a static singleton "global"
ContextFactory.ContextAction.run(Context cx)
using the Context instance associated with the current thread.
If no Context is associated with the thread, then
ContextFactory.getGlobal().makeContext() will be called to
construct new Context instance. The instance will be temporary
associated with the thread during call to
ContextAction.run(Context)
.ContextAction.run(Context)
.public static java.lang.Object call(ContextFactory factory, Callable callable, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Callable.call(Context cx, Scriptable scope, Scriptable thisObj,
Object[] args)
using the Context instance associated with the current thread.
If no Context is associated with the thread, then
ContextFactory.makeContext()
will be called to construct
new Context instance. The instance will be temporary associated
with the thread during call to ContextAction.run(Context)
.
It is allowed but not advisable to use null for factory argument in which case the global static singleton ContextFactory instance will be used to create new context instances.
ContextFactory.call(ContextAction)
public static void addContextListener(ContextListener listener)
public static void removeContextListener(ContextListener listener)
public final ContextFactory getFactory()
ContextFactory
instance used to create this Context.public final boolean isSealed()
seal(Object sealKey)
public final void seal(java.lang.Object sealKey)
enter()
and exit()
methods will
throw an exception.
If sealKey is not null, calling
unseal(Object sealKey)
with the same key unseals
the object. If sealKey is null, unsealing is no longer possible.
isSealed()
,
unseal(Object)
public final void unseal(java.lang.Object sealKey)
seal(Object)
or an exception will be thrown.isSealed()
,
seal(Object sealKey)
public final int getLanguageVersion()
The language version number affects JavaScript semantics as detailed in the overview documentation.
public void setLanguageVersion(int version)
Setting the language version will affect functions and scripts compiled subsequently. See the overview documentation for version-specific behavior.
version
- the version as specified by VERSION_1_0, VERSION_1_1, etc.public static boolean isValidLanguageVersion(int version)
public static void checkLanguageVersion(int version)
public final java.lang.String getImplementationVersion()
The implementation version is of the form
"name langVer release
relNum date"
where name is the name of the product, langVer is
the language version, relNum is the release number, and
date is the release date for that specific
release in the form "yyyy mm dd".public final ErrorReporter getErrorReporter()
ErrorReporter
public final ErrorReporter setErrorReporter(ErrorReporter reporter)
ErrorReporter
public final java.util.Locale getLocale()
Locale
public final java.util.Locale setLocale(java.util.Locale loc)
Locale
public final void addPropertyChangeListener(java.beans.PropertyChangeListener l)
l
- the listenerPropertyChangeEvent
,
removePropertyChangeListener(java.beans.PropertyChangeListener)
public final void removePropertyChangeListener(java.beans.PropertyChangeListener l)
l
- the listenerPropertyChangeEvent
,
addPropertyChangeListener(java.beans.PropertyChangeListener)
public static void reportWarning(java.lang.String message, java.lang.String sourceName, int lineno, java.lang.String lineSource, int lineOffset)
message
- the warning message to reportsourceName
- a string describing the source, such as a filenamelineno
- the starting line numberlineSource
- the text of the line (may be null)lineOffset
- the offset into lineSource where problem was detectedErrorReporter
public static void reportWarning(java.lang.String message)
message
- the warning message to reportErrorReporter
public static void reportWarning(java.lang.String message, java.lang.Throwable t)
public static void reportError(java.lang.String message, java.lang.String sourceName, int lineno, java.lang.String lineSource, int lineOffset)
message
- the error message to reportsourceName
- a string describing the source, such as a filenamelineno
- the starting line numberlineSource
- the text of the line (may be null)lineOffset
- the offset into lineSource where problem was detectedErrorReporter
public static void reportError(java.lang.String message)
message
- the error message to reportErrorReporter
public static EvaluatorException reportRuntimeError(java.lang.String message, java.lang.String sourceName, int lineno, java.lang.String lineSource, int lineOffset)
message
- the error message to reportsourceName
- a string describing the source, such as a filenamelineno
- the starting line numberlineSource
- the text of the line (may be null)lineOffset
- the offset into lineSource where problem was detectedErrorReporter
public static EvaluatorException reportRuntimeError(java.lang.String message)
message
- the error message to reportErrorReporter
public final ScriptableObject initStandardObjects()
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
public final Scriptable initStandardObjects(ScriptableObject scope)
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
scope
- the scope to initialize, or null, in which case a new
object will be created to serve as the scopeScriptableObject
.public ScriptableObject initStandardObjects(ScriptableObject scope, boolean sealed)
This method must be called to initialize a scope before scripts can be evaluated in that scope.
This method does not affect the Context it is called upon.
This form of the method also allows for creating "sealed" standard objects. An object that is sealed cannot have properties added, changed, or removed. This is useful to create a "superglobal" that can be shared among several top-level objects. Note that sealing is not allowed in the current ECMA/ISO language specification, but is likely for the next version.
scope
- the scope to initialize, or null, in which case a new
object will be created to serve as the scopesealed
- whether or not to create sealed standard objects that
cannot be modified.public static java.lang.Object getUndefinedValue()
public final java.lang.Object evaluateString(Scriptable scope, java.lang.String source, java.lang.String sourceName, int lineno, java.lang.Object securityDomain)
scope
- the scope to execute insource
- the JavaScript sourcesourceName
- a string describing the source, such as a filenamelineno
- the starting line numbersecurityDomain
- an arbitrary object that specifies security
information about the origin or owner of the script. For
implementations that don't care about security, this value
may be null.SecurityController
public final java.lang.Object evaluateReader(Scriptable scope, java.io.Reader in, java.lang.String sourceName, int lineno, java.lang.Object securityDomain) throws java.io.IOException
scope
- the scope to execute inin
- the Reader to get JavaScript source fromsourceName
- a string describing the source, such as a filenamelineno
- the starting line numbersecurityDomain
- an arbitrary object that specifies security
information about the origin or owner of the script. For
implementations that don't care about security, this value
may be null.java.io.IOException
- if an IOException was generated by the Readerpublic java.lang.Object executeScriptWithContinuations(Script script, Scriptable scope) throws ContinuationPending
resumeContinuation(Object, Scriptable, Object)
.script
- The script to execute. Script must have been compiled
with interpreted mode (optimization level -1)scope
- The scope to execute the script againstContinuationPending
- if the script calls a function that results
in a call to captureContinuation()
public java.lang.Object callFunctionWithContinuations(Callable function, Scriptable scope, java.lang.Object[] args) throws ContinuationPending
resumeContinuation(Object, Scriptable, Object)
.function
- The function to call. The function must have been
compiled with interpreted mode (optimization level -1)scope
- The scope to execute the script againstargs
- The arguments for the functionContinuationPending
- if the script calls a function that results
in a call to captureContinuation()
public ContinuationPending captureContinuation()
executeScriptWithContinuations(Script, Scriptable)
or
callFunctionWithContinuations(Callable, Scriptable, Object[])
.
This implies that the code calling
this method must have been called as a function from the
JavaScript script. Also, there cannot be any non-JavaScript code
between the JavaScript frames (e.g., a call to eval()). The
ContinuationPending exception returned must be thrown.public java.lang.Object resumeContinuation(java.lang.Object continuation, Scriptable scope, java.lang.Object functionResult) throws ContinuationPending
captureContinuation()
. Execution of the code will resume
with the functionResult as the result of the call that captured the
continuation.
Execution of the script will either conclude normally and the
result returned, another continuation will be captured and
thrown, or the script will terminate abnormally and throw an exception.continuation
- The value returned by
ContinuationPending.getContinuation()
functionResult
- This value will appear to the code being resumed
as the result of the function that captured the continuationContinuationPending
- if another continuation is captured before
the code terminatespublic final boolean stringIsCompilableUnit(java.lang.String source)
stringIsCompilableUnit is intended to support interactive compilation of JavaScript. If compiling the string would result in an error that might be fixed by appending more source, this method returns false. In every other case, it returns true.
Interactive shells may accumulate source lines, using this method after each new line is appended to check whether the statement being entered is complete.
source
- the source buffer to checkpublic final Script compileReader(Scriptable scope, java.io.Reader in, java.lang.String sourceName, int lineno, java.lang.Object securityDomain) throws java.io.IOException
java.io.IOException
compileReader(Reader in, String sourceName, int lineno,
Object securityDomain)
public final Script compileReader(java.io.Reader in, java.lang.String sourceName, int lineno, java.lang.Object securityDomain) throws java.io.IOException
Returns a script that may later be executed. Will consume all the source in the reader.
in
- the input readersourceName
- a string describing the source, such as a filenamelineno
- the starting line number for reporting errorssecurityDomain
- an arbitrary object that specifies security
information about the origin or owner of the script. For
implementations that don't care about security, this value
may be null.java.io.IOException
- if an IOException was generated by the ReaderScript
public final Script compileString(java.lang.String source, java.lang.String sourceName, int lineno, java.lang.Object securityDomain)
Returns a script that may later be executed.
source
- the source stringsourceName
- a string describing the source, such as a filenamelineno
- the starting line number for reporting errors. Use
0 if the line number is unknown.securityDomain
- an arbitrary object that specifies security
information about the origin or owner of the script. For
implementations that don't care about security, this value
may be null.Script
public final Function compileFunction(Scriptable scope, java.lang.String source, java.lang.String sourceName, int lineno, java.lang.Object securityDomain)
The function source must be a function definition as defined by ECMA (e.g., "function f(a) { return a; }").
scope
- the scope to compile relative tosource
- the function definition sourcesourceName
- a string describing the source, such as a filenamelineno
- the starting line numbersecurityDomain
- an arbitrary object that specifies security
information about the origin or owner of the script. For
implementations that don't care about security, this value
may be null.Function
public final java.lang.String decompileScript(Script script, int indent)
The canonical source of the script is returned.
script
- the script to decompileindent
- the number of spaces to indent the resultpublic final java.lang.String decompileFunction(Function fun, int indent)
Decompiles a previously compiled JavaScript function object to canonical source.
Returns function body of '[native code]' if no decompilation information is available.
fun
- the JavaScript function to decompileindent
- the number of spaces to indent the resultpublic final java.lang.String decompileFunctionBody(Function fun, int indent)
Decompiles the body a previously compiled JavaScript Function object to canonical source, omitting the function header and trailing brace. Returns '[native code]' if no decompilation information is available.
fun
- the JavaScript function to decompileindent
- the number of spaces to indent the resultpublic Scriptable newObject(Scriptable scope)
scope
- the scope to search for the constructor and to evaluate
againstpublic Scriptable newObject(Scriptable scope, java.lang.String constructorName)
newObject(scope, "Foo")
is equivalent to
evaluating "new Foo()".scope
- the scope to search for the constructor and to evaluate againstconstructorName
- the name of the constructor to callpublic Scriptable newObject(Scriptable scope, java.lang.String constructorName, java.lang.Object[] args)
scope
for the named constructor, calls it with
the given arguments, and returns the result.The code
Object[] args = { "a", "b" }; newObject(scope, "Foo", args)is equivalent to evaluating "new Foo('a', 'b')", assuming that the Foo constructor has been defined in
scope
.scope
- The scope to search for the constructor and to evaluate
againstconstructorName
- the name of the constructor to callargs
- the array of arguments for the constructorpublic Scriptable newArray(Scriptable scope, int length)
scope
- the scope to create the object inlength
- the initial length (JavaScript arrays may have
additional properties added dynamically).public Scriptable newArray(Scriptable scope, java.lang.Object[] elements)
scope
- the scope to create the object in.elements
- the initial elements. Each object in this array
must be an acceptable JavaScript type and type
of array should be exactly Object[], not
SomeObjectSubclass[].public final java.lang.Object[] getElements(Scriptable object)
If the object defines a length property convertible to double number, then the number is converted Uint32 value as defined in Ecma 9.6 and Java array of that size is allocated. The array is initialized with the values obtained by calling get() on object for each value of i in [0,length-1]. If there is not a defined value for a property the Undefined value is used to initialize the corresponding element in the array. The Java array is then returned. If the object doesn't define a length property or it is not a number, empty array is returned.
object
- the JavaScript array or array-like objectpublic static boolean toBoolean(java.lang.Object value)
See ECMA 9.2.
value
- a JavaScript valuepublic static double toNumber(java.lang.Object value)
Returns a Java double for the JavaScript Number.
See ECMA 9.3.
value
- a JavaScript valuepublic static java.lang.String toString(java.lang.Object value)
See ECMA 9.8.
value
- a JavaScript valuepublic static Scriptable toObject(java.lang.Object value, Scriptable scope)
Note that a scope must be provided to look up the constructors for Number, Boolean, and String.
See ECMA 9.9.
Additionally, arbitrary Java objects and classes will be wrapped in a Scriptable object with its Java fields and methods reflected as JavaScript properties of the object.
value
- any Java objectscope
- global scope containing constructors for Number,
Boolean, and Stringpublic static Scriptable toObject(java.lang.Object value, Scriptable scope, java.lang.Class<?> staticType)
toObject(Object, Scriptable)
public static java.lang.Object javaToJS(java.lang.Object value, Scriptable scope)
If value is an instance of String, Number, Boolean, Function or Scriptable, it is returned as it and will be treated as the corresponding JavaScript type of string, number, boolean, function and object.
Note that for Number instances during any arithmetic operation in JavaScript the engine will always use the result of Number.doubleValue() resulting in a precision loss if the number can not fit into double.
If value is an instance of Character, it will be converted to string of length 1 and its JavaScript type will be string.
The rest of values will be wrapped as LiveConnect objects
by calling WrapFactory.wrap(Context cx, Scriptable scope,
Object obj, Class staticType)
as in:
Context cx = Context.getCurrentContext(); return cx.getWrapFactory().wrap(cx, scope, value, null);
value
- any Java objectscope
- top scope objectpublic static java.lang.Object jsToJava(java.lang.Object value, java.lang.Class<?> desiredType) throws EvaluatorException
value
- the JavaScript value to convertdesiredType
- the Java type to convert to. Primitive Java
types are represented using the TYPE fields in the corresponding
wrapper class in java.lang.EvaluatorException
- if the conversion cannot be performedpublic static java.lang.Object toType(java.lang.Object value, java.lang.Class<?> desiredType) throws java.lang.IllegalArgumentException
java.lang.IllegalArgumentException
- if the conversion cannot be performed.
Note that jsToJava(Object, Class)
throws
EvaluatorException
instead.jsToJava(Object, Class)
public static java.lang.RuntimeException throwAsScriptRuntimeEx(java.lang.Throwable e)
EcmaError
or
EvaluatorException
it will be wrapped as
WrappedException
, a subclass of EvaluatorException
.
The resulting exception object always contains
source name and line number of script that triggered exception.
This method always throws an exception, its return value is provided only for convenience to allow a usage like:
throw Context.throwAsScriptRuntimeEx(ex);to indicate that code after the method is unreachable.
EvaluatorException
EcmaError
public final boolean isGeneratingDebug()
public final void setGeneratingDebug(boolean generatingDebug)
Setting the generation of debug information on will set the optimization level to zero.
public final boolean isGeneratingSource()
public final void setGeneratingSource(boolean generatingSource)
Without source information, evaluating the "toString" method on JavaScript functions produces only "[native code]" for the body of the function. Note that code generated without source is not fully ECMA conformant.
public final int getOptimizationLevel()
The optimization level is expressed as an integer between -1 and 9.
public final void setOptimizationLevel(int optimizationLevel)
The optimization level is expected to be an integer between -1 and 9. Any negative values will be interpreted as -1, and any values greater than 9 will be interpreted as 9. An optimization level of -1 indicates that interpretive mode will always be used. Levels 0 through 9 indicate that class files may be generated. Higher optimization levels trade off compile time performance for runtime performance. The optimizer level can't be set greater than -1 if the optimizer package doesn't exist at run time.
optimizationLevel
- an integer indicating the level of
optimization to performpublic static boolean isValidOptimizationLevel(int optimizationLevel)
public static void checkOptimizationLevel(int optimizationLevel)
public final int getMaximumInterpreterStackDepth()
public final void setMaximumInterpreterStackDepth(int max)
max
- the new maximum interpreter stack depthjava.lang.IllegalStateException
- if this context's optimization level is not
-1java.lang.IllegalArgumentException
- if the new depth is not at least 1public final void setSecurityController(SecurityController controller)
SecurityController may only be set if it is currently null
and SecurityController.hasGlobal()
is false.
Otherwise a SecurityException is thrown.
controller
- a SecurityController objectjava.lang.SecurityException
- if there is already a SecurityController
object for this Context or globally installed.SecurityController.initGlobal(SecurityController controller)
,
SecurityController.hasGlobal()
public final void setClassShutter(ClassShutter shutter)
ClassShutter
may only be set if it is currently null.
Otherwise a SecurityException is thrown.
shutter
- a ClassShutter objectjava.lang.SecurityException
- if there is already a ClassShutter
object for this Contextpublic final Context.ClassShutterSetter getClassShutterSetter()
public final java.lang.Object getThreadLocal(java.lang.Object key)
Since the Context is associated with a thread it can be used to maintain values that can be later retrieved using the current thread.
Note that the values are maintained with the Context, so if the Context is disassociated from the thread the values cannot be retrieved. Also, if private data is to be maintained in this manner the key should be a java.lang.Object whose reference is not divulged to untrusted code.
key
- the key used to lookup the valuepublic final void putThreadLocal(java.lang.Object key, java.lang.Object value)
key
- the key used to index the valuevalue
- the value to savepublic final void removeThreadLocal(java.lang.Object key)
key
- the key for the entry to remove.public static void setCachingEnabled(boolean cachingEnabled)
public final void setWrapFactory(WrapFactory wrapFactory)
The WrapFactory allows custom object wrapping behavior for Java object manipulated with JavaScript.
WrapFactory
public final WrapFactory getWrapFactory()
WrapFactory
public final Debugger getDebugger()
public final java.lang.Object getDebuggerContextData()
public final void setDebugger(Debugger debugger, java.lang.Object contextData)
debugger
- the debugger to be used on callbacks from
the engine.contextData
- arbitrary object that debugger can use to store
per Context data.public static DebuggableScript getDebuggableView(Script script)
public boolean hasFeature(int featureIndex)
The default implementation calls
ContextFactory.hasFeature(Context cx, int featureIndex)
that allows to customize Context behavior without introducing
Context subclasses. ContextFactory
documentation gives
an example of hasFeature implementation.
featureIndex
- feature index to checkfeatureIndex
feature is turned onFEATURE_NON_ECMA_GET_YEAR
,
FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME
,
FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER
,
FEATURE_TO_STRING_AS_SOURCE
,
FEATURE_PARENT_PROTO_PROPRTIES
,
FEATURE_E4X
,
FEATURE_DYNAMIC_SCOPE
,
FEATURE_STRICT_VARS
,
FEATURE_STRICT_EVAL
,
FEATURE_LOCATION_INFORMATION_IN_ERROR
,
FEATURE_STRICT_MODE
,
FEATURE_WARNING_AS_ERROR
,
FEATURE_ENHANCED_JAVA_ACCESS
public XMLLib.Factory getE4xImplementationFactory()
Context
. Note that the XMLLib.Factory interface should
be considered experimental.
The default implementation uses the implementation provided by this
Context
's ContextFactory
.null
if
FEATURE_E4X
is enabled. See hasFeature(int)
.public final int getInstructionObserverThreshold()
observeInstructionCount()
.
When the threshold is zero, instruction counting is disabled,
otherwise each time the run-time executes at least the threshold value
of script instructions, observeInstructionCount()
will
be called.public final void setInstructionObserverThreshold(int threshold)
observeInstructionCount()
.
When the threshold is zero, instruction counting is disabled,
otherwise each time the run-time executes at least the threshold value
of script instructions, observeInstructionCount()
will
be called.
Note that the meaning of "instruction" is not guaranteed to be
consistent between compiled and interpretive modes: executing a given
script or function in the different modes will result in different
instruction counts against the threshold.
setGenerateObserverCount(boolean)
is called with true if
threshold
is greater than zero, false otherwise.threshold
- The instruction thresholdpublic void setGenerateObserverCount(boolean generateObserverCount)
generateObserverCount
- if true, generated code will contain
calls to accumulate an estimate of the instructions executed.protected void observeInstructionCount(int instructionCount)
setInstructionObserverThreshold()
.
The method is useful to observe long running scripts and if necessary
to terminate them.
The default implementation calls
ContextFactory.observeInstructionCount(Context cx,
int instructionCount)
that allows to customize Context behavior without introducing
Context subclasses.
instructionCount
- amount of script instruction executed since
last call to observeInstructionCount
java.lang.Error
- to terminate the scriptsetOptimizationLevel(int)
public GeneratedClassLoader createClassLoader(java.lang.ClassLoader parent)
ContextFactory.createClassLoader(ClassLoader)
using the result of getFactory()
.public final java.lang.ClassLoader getApplicationClassLoader()
public final void setApplicationClassLoader(java.lang.ClassLoader loader)
public final boolean isGeneratingDebugChanged()
public void addActivationName(java.lang.String name)
name
- the name of the object to add to the listpublic final boolean isActivationNeeded(java.lang.String name)
name
- the name of the object to testpublic void removeActivationName(java.lang.String name)
name
- the name of the object to remove from the list