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]