Class Script

java.lang.Object
org.apache.commons.jexl3.internal.Script
All Implemented Interfaces:
JexlExpression, JexlScript
Direct Known Subclasses:
Closure

public class Script extends Object implements JexlScript, JexlExpression

A JexlScript implementation.

Since:
1.1
  • Field Details

    • jexl

      protected final Engine jexl
      The engine for this expression.
    • source

      protected final String source
      Original expression stripped from leading and trailing spaces.
    • script

      protected final ASTJexlScript script
      The resulting AST we can interpret.
    • version

      protected int version
      The engine version (as class loader change count) that last evaluated this script.
  • Constructor Details

    • Script

      protected Script(Engine engine, String expr, ASTJexlScript ref)
      Do not let this be generally instantiated with a 'new'.
      Parameters:
      engine - the interpreter to evaluate the expression
      expr - the expression source.
      ref - the parsed expression.
  • Method Details

    • getScript

      protected ASTJexlScript getScript()
      Returns:
      the script AST
    • checkCacheVersion

      protected void checkCacheVersion()
      Checks that this script cached methods (wrt introspection) matches the engine version.

      If the engine class loader has changed since we last evaluated this script, the script local cache is invalidated to drop references to obsolete methods. It is not strictly necessary since the tryExecute will fail because the class won't match but it seems cleaner nevertheless.

    • createFrame

      protected Frame createFrame(Object[] args)
      Creates this script frame for evaluation.
      Parameters:
      args - the arguments to bind to parameters
      Returns:
      the frame (may be null)
    • createInterpreter

      protected Interpreter createInterpreter(JexlContext context, Frame frame)
      Creates this script interpreter.
      Parameters:
      context - the context
      frame - the calling frame
      Returns:
      the interpreter
    • createInterpreter

      protected Interpreter createInterpreter(JexlContext context, Frame frame, JexlOptions options)
      Creates this script interpreter.
      Parameters:
      context - the context
      frame - the calling frame
      options - the interpreter options
      Returns:
      the interpreter
    • getEngine

      public JexlEngine getEngine()
      Returns:
      the engine that created this script
    • getSourceText

      public String getSourceText()
      Description copied from interface: JexlScript
      Returns the source text of this expression.
      Specified by:
      getSourceText in interface JexlExpression
      Specified by:
      getSourceText in interface JexlScript
      Returns:
      the source text
    • getParsedText

      public String getParsedText()
      Description copied from interface: JexlScript
      Recreates the source text of this expression from the internal syntactic tree.
      Specified by:
      getParsedText in interface JexlExpression
      Specified by:
      getParsedText in interface JexlScript
      Returns:
      the source text
    • getParsedText

      public String getParsedText(int indent)
      Description copied from interface: JexlScript
      Recreates the source text of this expression from the internal syntactic tree.
      Specified by:
      getParsedText in interface JexlScript
      Parameters:
      indent - the number of spaces for indentation, 0 meaning no indentation
      Returns:
      the source text
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • evaluate

      public Object evaluate(JexlContext context)
      Description copied from interface: JexlExpression
      Evaluates the expression with the variables contained in the supplied JexlContext.
      Specified by:
      evaluate in interface JexlExpression
      Parameters:
      context - A JexlContext containing variables.
      Returns:
      The result of this evaluation
    • execute

      public Object execute(JexlContext context)
      Description copied from interface: JexlScript
      Executes the script with the variables contained in the supplied JexlContext.
      Specified by:
      execute in interface JexlScript
      Parameters:
      context - A JexlContext containing variables.
      Returns:
      The result of this script, usually the result of the last statement.
    • execute

      public Object execute(JexlContext context, Object... args)
      Description copied from interface: JexlScript
      Executes the script with the variables contained in the supplied JexlContext and a set of arguments corresponding to the parameters used during parsing.
      Specified by:
      execute in interface JexlScript
      Parameters:
      context - A JexlContext containing variables.
      args - the arguments
      Returns:
      The result of this script, usually the result of the last statement.
    • curry

      public JexlScript curry(Object... args)
      Description copied from interface: JexlScript
      Curries this script, returning a script with bound arguments.

      If this script does not declare parameters or if all of them are already bound, no error is generated and this script is returned.

      Specified by:
      curry in interface JexlScript
      Parameters:
      args - the arguments to bind
      Returns:
      the curried script or this script if no binding can occur
    • getParameters

      public String[] getParameters()
      Description copied from interface: JexlScript
      Gets this script parameters.
      Specified by:
      getParameters in interface JexlScript
      Returns:
      the parameters or null
    • getUnboundParameters

      public String[] getUnboundParameters()
      Description copied from interface: JexlScript
      Gets this script unbound parameters.

      Parameters that haven't been bound by a previous call to curry().

      Specified by:
      getUnboundParameters in interface JexlScript
      Returns:
      the parameters or null
    • getLocalVariables

      public String[] getLocalVariables()
      Description copied from interface: JexlScript
      Gets this script local variables.
      Specified by:
      getLocalVariables in interface JexlScript
      Returns:
      the local variables or null
    • getCapturedVariables

      public String[] getCapturedVariables()
      Gets this script captured variable, i.e. symbols captured from outer scopes.
      Returns:
      the captured variable names
    • getInfo

      public JexlInfo getInfo()
      Returns:
      the info
    • getFeatures

      public JexlFeatures getFeatures()
      Returns:
      the script features
    • getVariables

      public Set<List<String>> getVariables()
      Gets this script variables.

      Note that since variables can be in an ant-ish form (ie foo.bar.quux), each variable is returned as a list of strings where each entry is a fragment of the variable ({"foo", "bar", "quux"} in the example.

      Specified by:
      getVariables in interface JexlScript
      Returns:
      the variables or null
    • getPragmas

      public Map<String,Object> getPragmas()
      Get this script pragmas

      Pragma keys are ant-ish variables, their values are scalar literals..

      Specified by:
      getPragmas in interface JexlScript
      Returns:
      the pragmas
    • callable

      public Script.Callable callable(JexlContext context)
      Creates a Callable from this script.

      This allows to submit it to an executor pool and provides support for asynchronous calls.

      The interpreter will handle interruption/cancellation gracefully if needed.

      Specified by:
      callable in interface JexlExpression
      Specified by:
      callable in interface JexlScript
      Parameters:
      context - the context
      Returns:
      the callable
    • callable

      public Script.Callable callable(JexlContext context, Object... args)
      Creates a Callable from this script.

      This allows to submit it to an executor pool and provides support for asynchronous calls.

      The interpreter will handle interruption/cancellation gracefully if needed.

      Specified by:
      callable in interface JexlScript
      Parameters:
      context - the context
      args - the script arguments
      Returns:
      the callable