org.apache.xalan.xsltc.compiler
Class LiteralElement

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.LiteralElement
All Implemented Interfaces:
Constants

final class LiteralElement
extends Instruction


Field Summary
private  java.util.Hashtable _accessedPrefixes
           
private  boolean _allAttributesUnique
           
private  java.util.Vector _attributeElements
           
private  LiteralElement _literalElemParent
           
private  java.lang.String _name
           
private static java.lang.String XMLNS_STRING
           
 
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_URI, XSLT_PACKAGE, XSLT_URI
 
Constructor Summary
LiteralElement()
           
 
Method Summary
private  java.lang.String accessedNamespace(java.lang.String prefix)
          Returns the namespace URI for which a prefix is pointing to
 void addAttribute(SyntaxTreeNode attribute)
          Add an attribute to this element
 boolean allAttributesUnique()
          Return true if all attributes of this LRE have unique names.
private  boolean canProduceAttributeNodes(SyntaxTreeNode node, boolean ignoreXslAttribute)
          Return true if the instructions under the given SyntaxTreeNode can produce attribute nodes to an element.
private  boolean checkAttributesUnique()
          Check whether all attributes are unique.
protected  boolean contextDependent()
          Returns true if this expression/instruction depends on the context.
 void display(int indent)
          Displays the contents of this literal element
 ElemDesc getElemDesc()
          Return the ElemDesc object for an HTML element.
 QName getName()
          Returns the QName for this literal element
 java.util.Enumeration getNamespaceScope(SyntaxTreeNode node)
          This method starts at a given node, traverses all namespace mappings, and assembles a list of all prefixes that (for the given node) maps to _ANY_ namespace URI.
private  boolean isHTMLOutput()
          Return true if the output method is html.
 void parseContents(Parser parser)
          Determines the final QName for the element and its attributes.
 void registerNamespace(java.lang.String prefix, java.lang.String uri, SymbolTable stable, boolean declared)
          Method used to keep track of what namespaces that are references by this literal element and its attributes.
 void setFirstAttribute(SyntaxTreeNode attribute)
          Set the first attribute of this element
 void translate(ClassGenerator classGen, MethodGenerator methodGen)
          Compiles code that emits the literal element to the output handler, first the start tag, then namespace declaration, then attributes, then the element contents, and then the element end tag.
private  java.lang.String translateQName(QName qname, SymbolTable stable)
          Translates the prefix of a QName according to the rules set in the attributes of xsl:stylesheet.
 Type typeCheck(SymbolTable stable)
          Type-check the contents of this element.
 
Methods inherited from class org.apache.xalan.xsltc.compiler.SyntaxTreeNode
addAttribute, addElement, addPrefixMapping, compileResultTree, dependentContents, 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

_name

private java.lang.String _name

_literalElemParent

private LiteralElement _literalElemParent

_attributeElements

private java.util.Vector _attributeElements

_accessedPrefixes

private java.util.Hashtable _accessedPrefixes

_allAttributesUnique

private boolean _allAttributesUnique

XMLNS_STRING

private static final java.lang.String XMLNS_STRING
See Also:
Constant Field Values
Constructor Detail

LiteralElement

LiteralElement()
Method Detail

getName

public QName getName()
Returns the QName for this literal element


display

public void display(int indent)
Displays the contents of this literal element

Overrides:
display in class SyntaxTreeNode
Parameters:
indent - Indentation level for syntax tree levels.

accessedNamespace

private java.lang.String accessedNamespace(java.lang.String prefix)
Returns the namespace URI for which a prefix is pointing to


registerNamespace

public void registerNamespace(java.lang.String prefix,
                              java.lang.String uri,
                              SymbolTable stable,
                              boolean declared)
Method used to keep track of what namespaces that are references by this literal element and its attributes. The output must contain a definition for each namespace, so we stuff them in a hashtable.


translateQName

private java.lang.String translateQName(QName qname,
                                        SymbolTable stable)
Translates the prefix of a QName according to the rules set in the attributes of xsl:stylesheet. Also registers a QName to assure that the output element contains the necessary namespace declarations.


addAttribute

public void addAttribute(SyntaxTreeNode attribute)
Add an attribute to this element


setFirstAttribute

public void setFirstAttribute(SyntaxTreeNode attribute)
Set the first attribute of this element


typeCheck

public Type typeCheck(SymbolTable stable)
               throws TypeCheckError
Type-check the contents of this element. The element itself does not need any type checking as it leaves nothign on the JVM's stack.

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

getNamespaceScope

public java.util.Enumeration getNamespaceScope(SyntaxTreeNode node)
This method starts at a given node, traverses all namespace mappings, and assembles a list of all prefixes that (for the given node) maps to _ANY_ namespace URI. Used by literal result elements to determine


parseContents

public void parseContents(Parser parser)
Determines the final QName for the element and its attributes. Registers all namespaces that are used by the element/attributes

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

contextDependent

protected boolean contextDependent()
Description copied from class: SyntaxTreeNode
Returns true if this expression/instruction depends on the context. By default, every expression/instruction depends on the context unless it overrides this method. Currently used to determine if result trees are compiled using procedures or little DOMs (result tree fragments).

Overrides:
contextDependent in class SyntaxTreeNode
Returns:
'true' if this node depends on the context.

translate

public void translate(ClassGenerator classGen,
                      MethodGenerator methodGen)
Compiles code that emits the literal element to the output handler, first the start tag, then namespace declaration, then attributes, then the element contents, and then the element end tag. Since the value of an attribute may depend on a variable, variables must be compiled first.

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

isHTMLOutput

private boolean isHTMLOutput()
Return true if the output method is html.


getElemDesc

public ElemDesc getElemDesc()
Return the ElemDesc object for an HTML element. Return null if the output method is not HTML or this is not a valid HTML element.


allAttributesUnique

public boolean allAttributesUnique()
Return true if all attributes of this LRE have unique names.


checkAttributesUnique

private boolean checkAttributesUnique()
Check whether all attributes are unique.


canProduceAttributeNodes

private boolean canProduceAttributeNodes(SyntaxTreeNode node,
                                         boolean ignoreXslAttribute)
Return true if the instructions under the given SyntaxTreeNode can produce attribute nodes to an element. Only return false when we are sure that no attribute node is produced. Return true if we are not sure. If the flag ignoreXslAttribute is true, the direct children of the current node are not included in the check.