org.apache.xalan.xsltc.compiler
Class Sort

java.lang.Object
  extended by org.apache.xalan.xsltc.compiler.SyntaxTreeNode
      extended by org.apache.xalan.xsltc.compiler.Instruction
          extended by org.apache.xalan.xsltc.compiler.Sort
All Implemented Interfaces:
Closure, Constants

final class Sort
extends Instruction
implements Closure


Field Summary
private  AttributeValue _caseOrder
           
private  java.lang.String _className
           
private  java.util.ArrayList _closureVars
           
private  java.lang.String _data
           
private  AttributeValue _dataType
           
private  java.lang.String _lang
           
private  boolean _needsSortRecordFactory
           
private  AttributeValue _order
           
private  Expression _select
           
 
Fields inherited from class org.apache.xalan.xsltc.compiler.SyntaxTreeNode
_attributes, _parent, _qname, Dummy, IndentIncrement, UNKNOWN_STYLESHEET_NODE_ID
 
Fields inherited from interface org.apache.xalan.xsltc.compiler.Constants
ABSOLUTE_ITERATOR, ACC_FINAL, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_SUPER, ADD_ATTRIBUTE, ADD_ATTRIBUTE_SIG, ADD_ITERATOR, ADD_ITERATOR_SIG, ADD_PARAMETER, ADD_PARAMETER_SIG, APPLY_TEMPLATES, ATTR_SET_SIG, ATTRIBUTE_LIST_FIELD, ATTRIBUTE_LIST_IMPL_CLASS, ATTRIBUTE_LIST_IMPL_SIG, ATTRIBUTES_SIG, BASIS_LIBRARY_CLASS, BOOLEAN_CLASS, BOOLEAN_VALUE, BOOLEAN_VALUE_SIG, CACHED_NODE_LIST_ITERATOR_CLASS, CHARACTERS, CHARACTERS_SIG, CHARACTERSW, CHARACTERSW_SIG, CLEAR_ATTRIBUTES, CLEAR_ATTRIBUTES_SIG, COLLATOR_CLASS, COLLATOR_SIG, COMPILER_PACKAGE, CURRENT_NODE_LIST_FILTER, CURRENT_NODE_LIST_FILTER_SIG, CURRENT_NODE_LIST_ITERATOR, CURRENT_NODE_LIST_ITERATOR_SIG, DEFAULT_NODE_COUNTER, DEFAULT_NODE_COUNTER_SIG, DOCUMENT_PNAME, DOM_ADAPTER_CLASS, DOM_ADAPTER_SIG, DOM_FIELD, DOM_IMPL, DOM_IMPL_CLASS, DOM_IMPL_SIG, DOM_INTF, DOM_INTF_SIG, DOM_PNAME, DOUBLE_CLASS, DOUBLE_SIG, DOUBLE_VALUE, DOUBLE_VALUE_SIG, DUP_FILTERED_ITERATOR, EMPTYATTR_FIELD, EMPTYSTRING, ERROR, EXPAND_STYLESHEET_QNAME_REF, EXPAND_STYLESHEET_QNAME_SIG, FALLBACK_CLASS, FATAL, FILTER_INTERFACE, FILTER_INTERFACE_SIG, FILTER_ITERATOR, FILTER_STEP_ITERATOR, FORMAT_SYMBOLS_FIELD, GET_ATTRIBUTE_VALUE, GET_ATTRIBUTE_VALUE_SIG, GET_CHILDREN, GET_CHILDREN_SIG, GET_ELEMENT_VALUE, GET_ELEMENT_VALUE_SIG, GET_ITERATOR_SIG, GET_NODE_NAME, GET_NODE_NAME_SIG, GET_NODE_TYPE, GET_NODE_TYPE_SIG, GET_NODE_VALUE, GET_NODE_VALUE_ITERATOR, GET_NODE_VALUE_ITERATOR_SIG, GET_NODE_VALUE_SIG, GET_PARAMETER, GET_PARAMETER_SIG, GET_PARENT, GET_PARENT_SIG, GET_TYPED_CHILDREN, GET_TYPED_CHILDREN_SIG, GET_UNPARSED_ENTITY_URI, GET_UNPARSED_ENTITY_URI_SIG, HAS_ATTRIBUTE, HAS_ATTRIBUTE_SIG, HASIDCALL_INDEX, HASIDCALL_INDEX_SIG, INT_VALUE, INT_VALUE_SIG, INTEGER_CLASS, INTEGER_SIG, INTERNAL, INVOKE_METHOD, ITERATOR_FIELD_SIG, ITERATOR_PNAME, KEY_INDEX_CLASS, KEY_INDEX_ITERATOR_SIG, KEY_INDEX_SIG, LAST_INDEX, LOAD_DOCUMENT_CLASS, LOCALE_CLASS, LOCALE_SIG, LOOKUP_STYLESHEET_QNAME_NS_REF, LOOKUP_STYLESHEET_QNAME_NS_SIG, MAKE_NODE, MAKE_NODE_LIST, MAKE_NODE_LIST_SIG, MAKE_NODE_LIST_SIG2, MAKE_NODE_SIG, MAKE_NODE_SIG2, MATCHING_ITERATOR, MATH_CLASS, MULTI_DOM_CLASS, MULTI_DOM_SIG, NAMES_INDEX, NAMES_INDEX_SIG, NAMESPACE_FEATURE, NAMESPACE_INDEX, NAMESPACE_INDEX_SIG, NEXT, NEXT_SIG, NEXTID, NODE, NODE_COUNTER, NODE_COUNTER_SIG, NODE_FIELD, NODE_FIELD_SIG, NODE_ITERATOR, NODE_ITERATOR_BASE, NODE_ITERATOR_SIG, NODE_PNAME, NODE_SIG, NODE_SORT_FACTORY, NODE_SORT_FACTORY_SIG, NODE_SORT_RECORD, NODE_SORT_RECORD_SIG, NS_ANCESTORS_INDEX_SIG, NTH_ITERATOR_CLASS, OBJECT_CLASS, OBJECT_SIG, ORDER_ITERATOR, ORDER_ITERATOR_SIG, OUTPUT_BASE, OUTPUT_HANDLER, OUTPUT_HANDLER_SIG, POP_PARAM_FRAME, POP_PARAM_FRAME_SIG, POSITION_INDEX, PREFIX_URIS_ARRAY_SIG, PREFIX_URIS_IDX_SIG, PUSH_PARAM_FRAME, PUSH_PARAM_FRAME_SIG, REDIRECT_URI, RESET, RESET_SIG, RTF_INITIAL_SIZE, RUNTIME_NODE_CLASS, RUNTIME_PACKAGE, SAX_IMPL, SAX_IMPL_CLASS, SAX_IMPL_SIG, SET_START_NODE, SET_START_NODE_SIG, SINGLETON_ITERATOR, SORT_ITERATOR, SORT_ITERATOR_SIG, STATIC_CHAR_DATA_FIELD, STATIC_CHAR_DATA_FIELD_SIG, STATIC_NAMES_ARRAY_FIELD, STATIC_NAMESPACE_ARRAY_FIELD, STATIC_NS_ANCESTORS_ARRAY_FIELD, STATIC_PREFIX_URIS_ARRAY_FIELD, STATIC_PREFIX_URIS_IDX_ARRAY_FIELD, STATIC_TYPES_ARRAY_FIELD, STATIC_URIS_ARRAY_FIELD, STEP_ITERATOR_CLASS, STREAM_XML_OUTPUT, STRING, STRING_BUFFER_CLASS, STRING_BUFFER_SIG, STRING_CLASS, STRING_SIG, STRING_TO_INT, STRING_TO_INT_SIG, STRING_TO_REAL, STRING_TO_REAL_SIG, STRING_VALUE_HANDLER, STRING_VALUE_HANDLER_SIG, STRING_WRITER, STRIP_SPACE, STRIP_SPACE_INTF, STRIP_SPACE_PARAMS, STRIP_SPACE_SIG, TRANSLET_CLASS, TRANSLET_FIELD, TRANSLET_FIELD_SIG, TRANSLET_INTF, TRANSLET_INTF_SIG, TRANSLET_OUTPUT_BASE, TRANSLET_OUTPUT_INTERFACE, TRANSLET_OUTPUT_PNAME, TRANSLET_OUTPUT_SIG, TRANSLET_PNAME, TRANSLET_SIG, TRANSLET_URI, TRANSLET_VERSION_INDEX, TRANSLET_VERSION_INDEX_SIG, TYPES_INDEX, TYPES_INDEX_SIG, UNION_ITERATOR_CLASS, UNION_ITERATOR_SIG, UNSUPPORTED, URIS_INDEX, URIS_INDEX_SIG, WARNING, WRITER_SIG, XHTML_URI, XMLNS_PREFIX, XMLNS_STRING, XMLNS_URI, XSLT_PACKAGE, XSLT_URI
 
Constructor Summary
Sort()
           
 
Method Summary
 void addVariable(VariableRefBase variableRef)
          Add new variable to the closure.
private static MethodGenerator compileExtract(java.util.Vector sortObjects, NodeSortRecordGenerator sortRecord, ConstantPoolGen cpg, java.lang.String className)
          Compiles a method that overloads NodeSortRecord.extractValueFromDOM()
private static MethodGenerator compileInit(java.util.Vector sortObjects, NodeSortRecordGenerator sortRecord, ConstantPoolGen cpg, java.lang.String className)
          Create a constructor for the new class.
private static java.lang.String compileSortRecord(java.util.Vector sortObjects, ClassGenerator classGen, MethodGenerator methodGen)
          Create a new auxillary class extending NodeSortRecord.
static void compileSortRecordFactory(java.util.Vector sortObjects, ClassGenerator classGen, MethodGenerator methodGen)
          Compiles code that instantiates a NodeSortRecordFactory object which will produce NodeSortRecord objects of a specific type.
static java.lang.String compileSortRecordFactory(java.util.Vector sortObjects, ClassGenerator classGen, MethodGenerator methodGen, java.lang.String sortRecordClass)
           
 java.lang.String getInnerClassName()
          Returns the name of the auxiliary class or null if this predicate is compiled inside the Translet.
 Closure getParentClosure()
          Returns a reference to its parent closure or null if outermost.
 boolean inInnerClass()
          Returns true if this closure is compiled in an inner class (i.e.
 void parseContents(Parser parser)
          Parse the attributes of the xsl:sort element
private  void setInnerClassName(java.lang.String className)
           
 void translate(ClassGenerator classGen, MethodGenerator methodGen)
          This method should not produce any code
 void translateCaseOrder(ClassGenerator classGen, MethodGenerator methodGen)
           
 void translateLang(ClassGenerator classGen, MethodGenerator methodGen)
           
 void translateSelect(ClassGenerator classGen, MethodGenerator methodGen)
          This method compiles code for the select expression for this xsl:sort element.
static void translateSortIterator(ClassGenerator classGen, MethodGenerator methodGen, Expression nodeSet, java.util.Vector sortObjects)
          Compiles code that instantiates a SortingIterator object.
 void translateSortOrder(ClassGenerator classGen, MethodGenerator methodGen)
           
 void translateSortType(ClassGenerator classGen, MethodGenerator methodGen)
          These two methods are needed in the static methods that compile the overloaded NodeSortRecord.compareType() and NodeSortRecord.sortOrder()
 Type typeCheck(SymbolTable stable)
          Run type checks on the attributes; expression must return a string which we will use as a sort key
 
Methods inherited from class org.apache.xalan.xsltc.compiler.SyntaxTreeNode
addAttribute, addElement, addPrefixMapping, compileResultTree, contextDependent, dependentContents, display, displayContents, elementAt, elementCount, elements, getAttribute, getAttribute, getAttributes, getContents, getImportPrecedence, getLineNumber, getNodeIDForStylesheetNSLookup, getParent, getParser, getPrefixMapping, getQName, getStylesheet, getSymbolTable, getTemplate, getXSLTC, hasAttribute, hasContents, indent, isDummy, lastChild, lookupNamespace, lookupPrefix, parseChildren, removeElement, reportError, reportWarning, setAttributes, setFirstElement, setLineNumber, setParent, setParser, setPrefixMapping, setQName, setQName, translateContents, typeCheckContents, updateScope
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_select

private Expression _select

_order

private AttributeValue _order

_caseOrder

private AttributeValue _caseOrder

_dataType

private AttributeValue _dataType

_lang

private java.lang.String _lang

_data

private java.lang.String _data

_className

private java.lang.String _className

_closureVars

private java.util.ArrayList _closureVars

_needsSortRecordFactory

private boolean _needsSortRecordFactory
Constructor Detail

Sort

Sort()
Method Detail

inInnerClass

public boolean inInnerClass()
Returns true if this closure is compiled in an inner class (i.e. if this is a real closure).

Specified by:
inInnerClass in interface Closure

getParentClosure

public Closure getParentClosure()
Returns a reference to its parent closure or null if outermost.

Specified by:
getParentClosure in interface Closure

getInnerClassName

public java.lang.String getInnerClassName()
Returns the name of the auxiliary class or null if this predicate is compiled inside the Translet.

Specified by:
getInnerClassName in interface Closure

addVariable

public void addVariable(VariableRefBase variableRef)
Add new variable to the closure.

Specified by:
addVariable in interface Closure

setInnerClassName

private void setInnerClassName(java.lang.String className)

parseContents

public void parseContents(Parser parser)
Parse the attributes of the xsl:sort element

Overrides:
parseContents in class SyntaxTreeNode
Parameters:
parser - reference to the XSLT parser

typeCheck

public Type typeCheck(SymbolTable stable)
               throws TypeCheckError
Run type checks on the attributes; expression must return a string which we will use as a sort key

Overrides:
typeCheck in class Instruction
Parameters:
stable - The compiler/parser's symbol table
Throws:
TypeCheckError

translateSortType

public void translateSortType(ClassGenerator classGen,
                              MethodGenerator methodGen)
These two methods are needed in the static methods that compile the overloaded NodeSortRecord.compareType() and NodeSortRecord.sortOrder()


translateSortOrder

public void translateSortOrder(ClassGenerator classGen,
                               MethodGenerator methodGen)

translateCaseOrder

public void translateCaseOrder(ClassGenerator classGen,
                               MethodGenerator methodGen)

translateLang

public void translateLang(ClassGenerator classGen,
                          MethodGenerator methodGen)

translateSelect

public void translateSelect(ClassGenerator classGen,
                            MethodGenerator methodGen)
This method compiles code for the select expression for this xsl:sort element. The method is called from the static code-generating methods in this class.


translate

public void translate(ClassGenerator classGen,
                      MethodGenerator methodGen)
This method should not produce any code

Overrides:
translate in class Instruction
Parameters:
classGen - BCEL Java class generator
methodGen - BCEL Java method generator

translateSortIterator

public static void translateSortIterator(ClassGenerator classGen,
                                         MethodGenerator methodGen,
                                         Expression nodeSet,
                                         java.util.Vector sortObjects)
Compiles code that instantiates a SortingIterator object. This object's constructor needs referencdes to the current iterator and a node sort record producing objects as its parameters.


compileSortRecordFactory

public static void compileSortRecordFactory(java.util.Vector sortObjects,
                                            ClassGenerator classGen,
                                            MethodGenerator methodGen)
Compiles code that instantiates a NodeSortRecordFactory object which will produce NodeSortRecord objects of a specific type.


compileSortRecordFactory

public static java.lang.String compileSortRecordFactory(java.util.Vector sortObjects,
                                                        ClassGenerator classGen,
                                                        MethodGenerator methodGen,
                                                        java.lang.String sortRecordClass)

compileSortRecord

private static java.lang.String compileSortRecord(java.util.Vector sortObjects,
                                                  ClassGenerator classGen,
                                                  MethodGenerator methodGen)
Create a new auxillary class extending NodeSortRecord.


compileInit

private static MethodGenerator compileInit(java.util.Vector sortObjects,
                                           NodeSortRecordGenerator sortRecord,
                                           ConstantPoolGen cpg,
                                           java.lang.String className)
Create a constructor for the new class. Updates the reference to the collator in the super calls only when the stylesheet specifies a new language in xsl:sort.


compileExtract

private static MethodGenerator compileExtract(java.util.Vector sortObjects,
                                              NodeSortRecordGenerator sortRecord,
                                              ConstantPoolGen cpg,
                                              java.lang.String className)
Compiles a method that overloads NodeSortRecord.extractValueFromDOM()