santiagopg    2004/06/10 15:26:03

  Modified:    java/src/org/apache/xalan/xsltc/compiler LiteralElement.java
  Log:
  Patch for Bugzilla 29411. New algorithm shoudl optimize the way NS decls are 
reported for nested literal elements. Note that the algorithm will not work 
accross non-literal elements. E.g., if there is an xsl:element between two 
literal elements, the inner literal element may report unnecessary NS delcs. 
This is just a simple way to ensure that any NS decls defined by the 
xsl:element instruction are re-defined in the inner literal (see namespace39 in 
the conf tests).
  
  Revision  Changes    Path
  1.27      +17 -19    
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java
  
  Index: LiteralElement.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- LiteralElement.java       21 May 2004 20:29:28 -0000      1.26
  +++ LiteralElement.java       10 Jun 2004 22:26:03 -0000      1.27
  @@ -44,7 +44,7 @@
   final class LiteralElement extends Instruction {
   
       private String _name;
  -    private LiteralElement _literalElemParent;
  +    private LiteralElement _literalElemParent = null;
       private Vector _attributeElements = null;
       private Hashtable _accessedPrefixes = null;
       
  @@ -75,10 +75,14 @@
        * Returns the namespace URI for which a prefix is pointing to
        */
       private String accessedNamespace(String prefix) {
  -     if (_accessedPrefixes == null)
  -         return(null);
  -     else
  -         return((String)_accessedPrefixes.get(prefix));
  +        if (_literalElemParent != null) {
  +            String result = _literalElemParent.accessedNamespace(prefix);
  +            if (result != null) {
  +                return result;
  +            }
  +        }       
  +        return _accessedPrefixes != null ? 
  +            (String) _accessedPrefixes.get(prefix) : null;
       }
   
       /**
  @@ -92,11 +96,9 @@
        // Check if the parent has a declaration for this namespace
        if (_literalElemParent != null) {
            final String parentUri = 
_literalElemParent.accessedNamespace(prefix);
  -         if (parentUri == null) {
  -             _literalElemParent.registerNamespace(prefix, uri, stable, 
declared);
  -             return;
  -         }
  -         if (parentUri.equals(uri)) return;
  +         if (parentUri != null && parentUri.equals(uri)) {
  +                return;
  +            }
        }
   
        // Check if we have any declared namesaces
  @@ -228,14 +230,10 @@
        final SymbolTable stable = parser.getSymbolTable();
        stable.setCurrentNode(this);
   
  -     // Find the closest literal element ancestor (if there is one)
  -     SyntaxTreeNode _literalElemParent = getParent();
  -     while (_literalElemParent != null && !(_literalElemParent instanceof 
LiteralElement)) {
  -         _literalElemParent = _literalElemParent.getParent();
  -     }
  -
  -     if (!(_literalElemParent instanceof LiteralElement)) {
  -         _literalElemParent = null;
  +     // Check if in a literal element context
  +     SyntaxTreeNode parent = getParent();
  +        if (parent != null && parent instanceof LiteralElement) {
  +            _literalElemParent = (LiteralElement) parent;
        }
   
        _name = translateQName(_qname, stable);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to