Class Copy
- java.lang.Object
-
- All Implemented Interfaces:
ExportAgent
,InstructionWithComplexContent
,ValidatingInstruction
,Locatable
,IdentityComparable
,Traceable
public class Copy extends ElementCreator
Handler for xsl:copy elements in stylesheet. This only handles copying of the context item. An xsl:copy with a select attribute is handled by wrapping the instruction in an xsl:for-each.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Copy.CopyElaborator
static class
Copy.CopyElementDetails
-
Nested classes/interfaces inherited from class net.sf.saxon.expr.instruct.ElementCreator
ElementCreator.ElementCreationDetails
-
-
Field Summary
-
Fields inherited from class net.sf.saxon.expr.instruct.ParentNodeConstructor
contentOp, preservingTypes
-
Fields inherited from class net.sf.saxon.expr.Expression
EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, ITEM_FEED_METHOD, ITERATE_METHOD, MAX_COST, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, UPDATE_METHOD, WATCH_METHOD
-
-
Constructor Summary
Constructors Constructor Description Copy(boolean copyNamespaces, boolean inheritNamespaces, SchemaType schemaType, int validation)
Create a shallow copy instruction
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Expression
copy(RebindingMap rebindings)
Copy this expression (don't be confused by the method name).static void
copyUnparsedEntities(NodeInfo source, Outputter out)
Item
evaluateItem(XPathContext context)
Evaluate as an itemvoid
export(ExpressionPresenter out)
Diagnostic print of expression structure.Elaborator
getElaborator()
Make an elaborator for this expressionint
getInstructionNameCode()
Get the name of this instruction for diagnostic and tracing purposesint
getIntrinsicDependencies()
Determine which aspects of the context the expression depends on.ItemType
getItemType()
Get the item type of the result of this instruction.java.lang.String
getStreamerName()
Get the (partial) name of a class that supports streaming of this kind of expressionboolean
isCopyNamespaces()
Ask whether namespace nodes are to be copied (in the case of an element)java.lang.Iterable<Operand>
operands()
Get the immediate sub-expressions of this expression, with information about the relationship of each expression to its parent expression.Expression
optimize(ExpressionVisitor visitor, ContextItemStaticInfo contextItemType)
Perform optimisation of an expression and its subexpressions.void
outputNamespaceNodes(Outputter receiver, NodeName nodeName, ElementCreator.ElementCreationDetails details)
Callback to output namespace nodes for the new element.void
setCopyNamespaces(boolean copy)
Say whether namespace nodes are to be copied (in the case of an element)void
setSelectItemType(ItemType type)
Set the item type of the inputExpression
simplify()
Simplify an expression.Expression
typeCheck(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo)
Perform type checking of an expression and its subexpressions.-
Methods inherited from class net.sf.saxon.expr.instruct.ElementCreator
checkContentSequence, computeSpecialProperties, getCardinality, getImplementationMethod, isBequeathNamespacesToChildren, isInheritNamespacesFromParent, makeElementCreationDetails, setBequeathNamespacesToChildren, setInheritanceFlags, setInheritNamespacesFromParent, suppressValidation
-
Methods inherited from class net.sf.saxon.expr.instruct.ParentNodeConstructor
addToPathMap, allowExtractingCommonSubexpressions, alwaysCreatesNewNodes, computeCardinality, getContentExpression, getContentOperand, getSchemaType, getValidationAction, getValidationOptions, isLocal, isPreservingTypes, mayCreateNewNodes, setContentExpression, setNoNeedToStrip, setValidationAction, setValidationOptions
-
Methods inherited from class net.sf.saxon.expr.instruct.Instruction
assembleParams, assembleTunnelParams, dynamicError, evaluateAsString, getExpressionName, getNetCost, getSourceLocator, isInstruction, isXSLT, iterate, process, someOperandCreatesNewNodes
-
Methods inherited from class net.sf.saxon.expr.Expression
adoptChildExpression, checkedOperands, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeHashCode, computeStaticProperties, dispatchTailCall, dynamicError, effectiveBooleanValue, equals, explain, getConfiguration, getCost, getDependencies, getEvaluationMethod, getExtraProperty, getIntegerBounds, getLocalRetainedStaticContext, getLocation, getObjectName, getPackageData, getParentExpression, getProperties, getProperty, getRetainedStaticContext, getScopingExpression, getSlotsUsed, getSpecialProperties, getStaticBaseURI, getStaticBaseURIString, getStaticType, getStaticUType, getTracingTag, hasCompatibleStaticContext, hashCode, hasSpecialProperty, hasVariableBinding, identityHashCode, implementsStaticTypeCheck, isCallOn, isEqual, isIdentical, isLiftable, isMultiThreaded, isStaticPropertiesKnown, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, makeElaborator, markTailFunctionCalls, operandList, operandSparseList, optimizeChildren, prepareForStreaming, resetLocalStaticProperties, restoreParentPointers, setEvaluationMethod, setExtraProperty, setFiltered, setFlattened, setLocation, setParentExpression, setRetainedStaticContext, setRetainedStaticContextLocally, setRetainedStaticContextThoroughly, setStaticProperty, simplifyChildren, staticTypeCheck, supportsLazyEvaluation, toPattern, toShortString, toString, typeCheckChildren, typeError, unordered, verifyParentPointers, withLocation
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface net.sf.saxon.trace.Traceable
gatherProperties
-
-
-
-
Constructor Detail
-
Copy
public Copy(boolean copyNamespaces, boolean inheritNamespaces, SchemaType schemaType, int validation)
Create a shallow copy instructionparam select selects the node (or other item) to be copied. Never null. param selectSpecified true if the select attribute of xsl:copy was specified explicitly (in which case the context for evaluating the body will change)
- Parameters:
copyNamespaces
- true if namespace nodes are to be copied when copying an elementinheritNamespaces
- true if child elements are to inherit the namespace nodes of their parentschemaType
- the Schema type against which the content is to be validatedvalidation
- the schema validation mode
-
-
Method Detail
-
setCopyNamespaces
public void setCopyNamespaces(boolean copy)
Say whether namespace nodes are to be copied (in the case of an element)- Parameters:
copy
- set to true if namespace nodes are to be copied
-
isCopyNamespaces
public boolean isCopyNamespaces()
Ask whether namespace nodes are to be copied (in the case of an element)- Returns:
- true if all in-scope namespaces are to be copied
-
simplify
public Expression simplify() throws XPathException
Simplify an expression. This performs any static optimization (by rewriting the expression as a different expression). The default implementation does nothing.- Overrides:
simplify
in classExpression
- Returns:
- the simplified expression (or the original if unchanged, or if modified in-situ)
- Throws:
XPathException
- if an error is discovered during expression rewriting
-
typeCheck
public Expression typeCheck(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) throws XPathException
Description copied from class:Expression
Perform type checking of an expression and its subexpressions. This is the second phase of static optimization.This checks statically that the operands of the expression have the correct type; if necessary it generates code to do run-time type checking or type conversion. A static type error is reported only if execution cannot possibly succeed, that is, if a run-time type error is inevitable. The call may return a modified form of the expression.
This method is called after all references to functions and variables have been resolved to the declaration of the function or variable. However, the types of such functions and variables may not be accurately known if they have not been explicitly declared.
- Overrides:
typeCheck
in classParentNodeConstructor
- Parameters:
visitor
- an expression visitorcontextInfo
- Information available statically about the context item: whether it is (possibly) absent; its static type; its streaming posture.- Returns:
- the original expression, rewritten to perform necessary run-time type checks, and to perform other type-related optimizations
- Throws:
XPathException
- if an error is discovered during this phase (typically a type error)
-
copy
public Expression copy(RebindingMap rebindings)
Copy this expression (don't be confused by the method name). This makes a deep copy.- Specified by:
copy
in classExpression
- Parameters:
rebindings
- variables that need to be re-bound- Returns:
- the copy of the original expression
-
setSelectItemType
public void setSelectItemType(ItemType type)
Set the item type of the input- Parameters:
type
- the item type
-
getIntrinsicDependencies
public int getIntrinsicDependencies()
Determine which aspects of the context the expression depends on. The result is a bitwise-or'ed value composed from constants such as XPathContext.VARIABLES and XPathContext.CURRENT_NODE. The default implementation combines the intrinsic dependencies of this expression with the dependencies of the subexpressions, computed recursively. This is overridden for expressions such as FilterExpression where a subexpression's dependencies are not necessarily inherited by the parent expression.- Overrides:
getIntrinsicDependencies
in classExpression
- Returns:
- a set of bit-significant flags identifying the dependencies of the expression
-
getInstructionNameCode
public int getInstructionNameCode()
Get the name of this instruction for diagnostic and tracing purposes- Overrides:
getInstructionNameCode
in classInstruction
- Returns:
- a code identifying the instruction: typically but not always the fingerprint of a name in the XSLT namespace
-
operands
public java.lang.Iterable<Operand> operands()
Get the immediate sub-expressions of this expression, with information about the relationship of each expression to its parent expression. Default implementation returns a zero-length array, appropriate for an expression that has no sub-expressions.- Specified by:
operands
in classInstruction
- Returns:
- an iterator containing the sub-expressions of this expression
-
getItemType
public ItemType getItemType()
Get the item type of the result of this instruction.- Overrides:
getItemType
in classElementCreator
- Returns:
- The context item type.
-
optimize
public Expression optimize(ExpressionVisitor visitor, ContextItemStaticInfo contextItemType) throws XPathException
Description copied from class:Expression
Perform optimisation of an expression and its subexpressions. This is the third and final phase of static optimization.This method is called after all references to functions and variables have been resolved to the declaration of the function or variable, and after all type checking has been done.
- Overrides:
optimize
in classParentNodeConstructor
- Parameters:
visitor
- an expression visitorcontextItemType
- the static type of "." at the point where this expression is invoked. The parameter is set to null if it is known statically that the context item will be undefined. If the type of the context item is not known statically, the argument is set toType.ITEM_TYPE
- Returns:
- the original expression, rewritten if appropriate to optimize execution
- Throws:
XPathException
- if an error is discovered during this phase (typically a type error)
-
outputNamespaceNodes
public void outputNamespaceNodes(Outputter receiver, NodeName nodeName, ElementCreator.ElementCreationDetails details) throws XPathException
Callback to output namespace nodes for the new element.- Specified by:
outputNamespaceNodes
in classElementCreator
- Parameters:
receiver
- the Receiver where the namespace nodes are to be writtennodeName
- the element namedetails
- the node being copied (for xsl:copy), otherwise null- Throws:
XPathException
- if any error occurs
-
copyUnparsedEntities
public static void copyUnparsedEntities(NodeInfo source, Outputter out) throws XPathException
- Throws:
XPathException
-
evaluateItem
public Item evaluateItem(XPathContext context) throws XPathException
Evaluate as an item- Overrides:
evaluateItem
in classInstruction
- Parameters:
context
- The context in which the expression is to be evaluated- Returns:
- the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
- Throws:
XPathException
- if any dynamic error occurs evaluating the expression
-
getStreamerName
public java.lang.String getStreamerName()
Get the (partial) name of a class that supports streaming of this kind of expression- Overrides:
getStreamerName
in classElementCreator
- Returns:
- the partial name of a class that can be instantiated to provide streaming support in Saxon-EE, or null if there is no such class
-
export
public void export(ExpressionPresenter out) throws XPathException
Diagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.- Specified by:
export
in interfaceExportAgent
- Specified by:
export
in classExpression
- Parameters:
out
- the expression presenter used to display the structure- Throws:
XPathException
- if the export fails, for example if an expression is found that won't work in the target environment.
-
getElaborator
public Elaborator getElaborator()
Description copied from class:Expression
Make an elaborator for this expression- Overrides:
getElaborator
in classExpression
- Returns:
- an appropriate
Elaborator
-
-