Class CastingExpression

All Implemented Interfaces:
ExportAgent, Locatable, IdentityComparable, Traceable
Direct Known Subclasses:
CastableExpression, CastExpression

public abstract class CastingExpression extends UnaryExpression
Casting Expression: abstract superclass for "cast as X" and "castable as X", which share a good deal of logic
  • Field Details

  • Constructor Details

    • CastingExpression

      public CastingExpression(Expression source, AtomicType target, boolean allowEmpty)
      Create a cast expression
      Parameters:
      source - expression giving the value to be converted
      target - the type to which the value is to be converted
      allowEmpty - true if the expression allows an empty sequence as input, producing an empty sequence as output. If false, an empty sequence is a type error.
  • Method Details

    • getTargetPrimitiveType

      public AtomicType getTargetPrimitiveType()
      Get the primitive base type of the target type of the cast
      Returns:
      the primitive type of the target type
    • setTargetType

      public void setTargetType(AtomicType type)
      Set the target type
      Parameters:
      type - the target type for the cast
    • getTargetType

      public AtomicType getTargetType()
      Get the target type (the result type)
      Returns:
      the target type
    • getOperandRole

      protected OperandRole getOperandRole()
      Description copied from class: UnaryExpression
      Get the usage (in terms of streamability analysis) of the single operand
      Specified by:
      getOperandRole in class UnaryExpression
      Returns:
      the operand usage
    • setAllowEmpty

      public void setAllowEmpty(boolean allow)
      Say whether the expression accepts an empty sequence as input (producing an empty sequence as output)
      Parameters:
      allow - true if an empty sequence is accepted
    • allowsEmpty

      public boolean allowsEmpty()
      Ask whether the expression accepts an empty sequence as input (producing an empty sequence as output)
      Returns:
      true if an empty sequence is accepted
    • setOperandIsStringLiteral

      public void setOperandIsStringLiteral(boolean option)
      Say whether the operand to the cast expression was supplied in the form of a string literal. This is relevant only for XPath 2.0 / XQuery 1.0, and then only when the target type is a QName or NOTATION.
      Parameters:
      option - true if the operand was supplied as a string literal
    • isOperandIsStringLiteral

      public boolean isOperandIsStringLiteral()
      Ask whether the operand to the cast expression was supplied in the form of a string literal. This is relevant only for XPath 2.0 / XQuery 1.0, and then only when the target type is a QName or NOTATION.
      Returns:
      true if the operand was supplied as a string literal
    • getConverter

      public Converter getConverter()
      Get the Converter allocated to implement this cast expression, if any
      Returns:
      the Converter if one has been statically allocated, or null if not
    • getNamespaceResolver

      public NamespaceResolver getNamespaceResolver()
      Get the namespace resolver, if any
      Returns:
      the namespace resolver that was statically allocated if the target type is namespace-sensitive
    • getIntrinsicDependencies

      public int getIntrinsicDependencies()
      Get the expression's dependencies. If the target type is namespace-sensitive, then the expression has a dependency on the namespace bindings in the static context
      Overrides:
      getIntrinsicDependencies in class Expression
      Returns:
      the expression's dependencies.
    • simplify

      public Expression simplify() throws XPathException
      Simplify the expression
      Overrides:
      simplify in class Expression
      Returns:
      the simplified expression (or the original if unchanged, or if modified in-situ)
      Throws:
      XPathException - if an error is discovered during expression rewriting
    • computeSpecialProperties

      protected int computeSpecialProperties()
      Determine the special properties of this expression
      Overrides:
      computeSpecialProperties in class UnaryExpression
      Returns:
      StaticProperty.NO_NODES_NEWLY_CREATED.
    • export

      protected void export(ExpressionPresenter out, String elemName) throws XPathException
      Export expression structure to SEF file. The abstract expression tree is written to the supplied output destination. Helper method for subclasses.
      Parameters:
      out - the destination of the output
      elemName - the element name to be used in the SEF file
      Throws:
      XPathException - if output fails