mkwan 2003/03/03 07:51:45
Modified: java/src/org/apache/xalan/xsltc/cmdline Tag: XSLTC_DTM
Transform.java
java/src/org/apache/xalan/xsltc/compiler Tag: XSLTC_DTM
Constants.java NameBase.java Stylesheet.java
XSLTC.java xpath.cup
java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
DOMImpl.java DocumentCache.java LoadDocument.java
SAXImpl.java XSLTCDTMManager.java
java/src/org/apache/xalan/xsltc/runtime Tag: XSLTC_DTM
AbstractTranslet.java BasisLibrary.java
java/src/org/apache/xalan/xsltc/trax Tag: XSLTC_DTM
TransformerHandlerImpl.java TransformerImpl.java
XSLTCSource.java
java/src/org/apache/xml/dtm/ref Tag: XSLTC_DTM
DTMDefaultBase.java
java/src/org/apache/xml/dtm/ref/sax2dtm Tag: XSLTC_DTM
SAX2DTM2.java
Log:
XSLTC_DTM performance work
Implement a feature for on-demand building of the ID index table.
Before this change, the SAX2DTM2 class always builds an ID index
hashtable by comparing the name of every attribute with "id". Now
we maintain a flag _hasIdCall in AbstractTranslet to indicate
whether the translet has id function calls. The value of this flag
is compiled into the translet from the Stylesheet class. The Stylesheet
class also has an _hasIdCall flag, which is set by the XPath parser.
When a SAXImpl object is created, the _hasIdCall flag is passed in from the
Translet. Now the id index table is only built when the stylesheet makes
use of the id function.
Also fix a bug in the NameBase class for using an incorrect class name
(org.apache.xml.dtm.ref.DTMAxisIterator should be
org.apache.xml.dtm.DTMAxisIterator).
Revision Changes Path
No revision
No revision
1.15.10.11 +7 -10
xml-xalan/java/src/org/apache/xalan/xsltc/cmdline/Transform.java
Index: Transform.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/cmdline/Transform.java,v
retrieving revision 1.15.10.10
retrieving revision 1.15.10.11
diff -u -r1.15.10.10 -r1.15.10.11
--- Transform.java 10 Feb 2003 19:36:45 -0000 1.15.10.10
+++ Transform.java 3 Mar 2003 15:51:36 -0000 1.15.10.11
@@ -74,7 +74,6 @@
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
-import org.apache.xalan.xsltc.Translet;
import org.apache.xalan.xsltc.TransletException;
import org.apache.xalan.xsltc.TransletOutputHandler;
import org.apache.xalan.xsltc.compiler.util.ErrorMsg;
@@ -85,7 +84,6 @@
import org.apache.xalan.xsltc.runtime.Parameter;
import org.apache.xalan.xsltc.runtime.TransletLoader;
import org.apache.xalan.xsltc.runtime.output.TransletOutputHandlerFactory;
-import org.apache.xml.dtm.DTMManager;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -153,7 +151,7 @@
try {
final Class clazz = loadTranslet(_className);
- final Translet translet = (Translet)clazz.newInstance();
+ final AbstractTranslet translet =
(AbstractTranslet)clazz.newInstance();
// Create a SAX parser and get the XMLReader object it uses
final SAXParserFactory factory = SAXParserFactory.newInstance();
@@ -167,15 +165,14 @@
final XMLReader reader = parser.getXMLReader();
// Set the DOM's DOM builder as the XMLReader's SAX2 content handler
- DTMManager dtmManager = XSLTCDTMManager.newInstance();
+ XSLTCDTMManager dtmManager = XSLTCDTMManager.newInstance();
final SAXImpl dom = (SAXImpl)dtmManager.getDTM(
new SAXSource(reader, new
InputSource(_fileName)),
- false, null, true, false);
+ false, null, true, false, translet.hasIdCall());
- AbstractTranslet _translet = (AbstractTranslet)translet;
dom.setDocumentURI(_fileName);
- _translet.prepassDocument(dom);
+ translet.prepassDocument(dom);
// Pass global parameters
int n = _params.size();
@@ -188,8 +185,8 @@
TransletOutputHandlerFactory tohFactory =
TransletOutputHandlerFactory.newInstance();
tohFactory.setOutputType(TransletOutputHandlerFactory.STREAM);
- tohFactory.setEncoding(_translet._encoding);
- tohFactory.setOutputMethod(_translet._method);
+ tohFactory.setEncoding(translet._encoding);
+ tohFactory.setOutputMethod(translet._method);
if (_iterations == -1) {
translet.transform(dom, _useOldOutputSystem ?
No revision
No revision
1.19.2.13 +5 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Constants.java
Index: Constants.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Constants.java,v
retrieving revision 1.19.2.12
retrieving revision 1.19.2.13
diff -u -r1.19.2.12 -r1.19.2.13
--- Constants.java 27 Feb 2003 19:56:03 -0000 1.19.2.12
+++ Constants.java 3 Mar 2003 15:51:36 -0000 1.19.2.13
@@ -398,6 +398,10 @@
= "namespaceArray";
public static final String NAMESPACE_INDEX_SIG
= "[" + STRING_SIG;
+ public static final String HASIDCALL_INDEX
+ = "_hasIdCall";
+ public static final String HASIDCALL_INDEX_SIG
+ = "Z";
public static final String DOM_FIELD
= "_dom";
1.6.6.6 +5 -6
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/NameBase.java
Index: NameBase.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/NameBase.java,v
retrieving revision 1.6.6.5
retrieving revision 1.6.6.6
diff -u -r1.6.6.5 -r1.6.6.6
--- NameBase.java 30 Jan 2003 18:41:37 -0000 1.6.6.5
+++ NameBase.java 3 Mar 2003 15:51:37 -0000 1.6.6.6
@@ -150,11 +150,10 @@
il.append(new INVOKESTATIC(cpg.addMethodref
(BASIS_LIBRARY_CLASS,
"referenceToNodeSet",
- "(Ljava/lang/Object;)" +
- "Lorg/apache/xml/dtm/ref/" +
- "DTMAxisIterator;")));
- //"Lorg/apache/xalan/xsltc/" +
- //"NodeIterator;")));
+ "("
+ + OBJECT_SIG
+ + ")"
+ + NODE_ITERATOR_SIG)));
il.append(methodGen.nextNode());
}
// Function was called with node-set parameter
1.37.2.6 +15 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Stylesheet.java
Index: Stylesheet.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Stylesheet.java,v
retrieving revision 1.37.2.5
retrieving revision 1.37.2.6
diff -u -r1.37.2.5 -r1.37.2.6
--- Stylesheet.java 30 Jan 2003 18:41:38 -0000 1.37.2.5
+++ Stylesheet.java 3 Mar 2003 15:51:37 -0000 1.37.2.6
@@ -138,6 +138,8 @@
private boolean _templateInlining = true;
private boolean _forwardReference = false;
+
+ private boolean _hasIdCall = false;
private Properties _outputProperties = null;
@@ -161,6 +163,10 @@
_simplified = true;
}
+ public void setHasIdCall(boolean flag) {
+ _hasIdCall = flag;
+ }
+
public void setOutputProperty(String key, String value) {
if (_outputProperties == null) {
_outputProperties = new Properties();
@@ -612,6 +618,14 @@
NAMESPACE_INDEX,
NAMESPACE_INDEX_SIG)));
+ if (_hasIdCall) {
+ il.append(classGen.loadTranslet());
+ il.append(new PUSH(cpg, Boolean.TRUE));
+ il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
+ HASIDCALL_INDEX,
+ HASIDCALL_INDEX_SIG)));
+ }
+
// Compile in code to set the output configuration from <xsl:output>
if (output != null) {
// Set all the output settings files in the translet
1.35.6.9 +12 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XSLTC.java
Index: XSLTC.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XSLTC.java,v
retrieving revision 1.35.6.8
retrieving revision 1.35.6.9
diff -u -r1.35.6.8 -r1.35.6.9
--- XSLTC.java 30 Jan 2003 18:41:39 -0000 1.35.6.8
+++ XSLTC.java 3 Mar 2003 15:51:37 -0000 1.35.6.9
@@ -147,6 +147,7 @@
private Vector _bcelClasses;
private boolean _callsNodeset = false;
private boolean _multiDocument = false;
+ private boolean _hasIdCall = false;
/**
* Set to true if template inlining is requested. Template
@@ -213,6 +214,7 @@
_helperClassSerial = 0;
_attributeSetSerial = 0;
_multiDocument = false;
+ _hasIdCall = false;
_numberFieldIndexes = new int[] {
-1, // LEVEL_SINGLE
-1, // LEVEL_MULTIPLE
@@ -354,6 +356,7 @@
if ((!_parser.errorsFound()) && (_stylesheet != null)) {
_stylesheet.setCallsNodeset(_callsNodeset);
_stylesheet.setMultiDocument(_multiDocument);
+ _stylesheet.setHasIdCall(_hasIdCall);
// Class synchronization is needed for BCEL
synchronized (getClass()) {
@@ -510,6 +513,14 @@
public boolean callsNodeset() {
return _callsNodeset;
+ }
+
+ protected void setHasIdCall(boolean flag) {
+ _hasIdCall = flag;
+ }
+
+ public boolean hasIdCall() {
+ return _hasIdCall;
}
/**
1.33.10.7 +10 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup
Index: xpath.cup
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup,v
retrieving revision 1.33.10.6
retrieving revision 1.33.10.7
diff -u -r1.33.10.6 -r1.33.10.7
--- xpath.cup 27 Jan 2003 19:44:42 -0000 1.33.10.6
+++ xpath.cup 3 Mar 2003 15:51:37 -0000 1.33.10.7
@@ -129,6 +129,11 @@
public void setCallsNodeset(boolean flag) {
_xsltc.setCallsNodeset(flag);
}
+
+ public void setHasIdCall(boolean flag) {
+ _xsltc.setHasIdCall(flag);
+ }
+
/**
* This method is similar to findNodeType(int, Object) except that it
@@ -413,7 +418,9 @@
{: RESULT = rpp; :};
IdKeyPattern ::= ID LPAREN Literal:l RPAREN
- {: RESULT = new IdPattern(l); :}
+ {: RESULT = new IdPattern(l);
+ parser.setHasIdCall(true);
+ :}
| KEY LPAREN Literal:l1 COMMA Literal:l2 RPAREN
{: RESULT = new KeyPattern(l1, l2); :};
@@ -980,6 +987,7 @@
}
else if (fname == parser.getQNameIgnoreDefaultNs("id")) {
RESULT = new KeyCall(fname, argl);
+ parser.setHasIdCall(true);
}
else if (fname == parser.getQNameIgnoreDefaultNs("ceiling")) {
RESULT = new CeilingCall(fname, argl);
No revision
No revision
1.68.2.25 +3 -3
xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
Index: DOMImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
retrieving revision 1.68.2.24
retrieving revision 1.68.2.25
diff -u -r1.68.2.24 -r1.68.2.25
--- DOMImpl.java 25 Feb 2003 19:14:49 -0000 1.68.2.24
+++ DOMImpl.java 3 Mar 2003 15:51:38 -0000 1.68.2.25
@@ -1842,8 +1842,8 @@
public DOM getResultTreeFrag(int initSize)
{
return (SAXImpl) ((XSLTCDTMManager)m_mgr).getDTM(null, true,
m_wsfilter,
- false, false, false,
- initSize);
+ true, false, false,
+ initSize, true);
}
/**
1.6.10.10 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/dom/DocumentCache.java
Index: DocumentCache.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DocumentCache.java,v
retrieving revision 1.6.10.9
retrieving revision 1.6.10.10
diff -u -r1.6.10.9 -r1.6.10.10
--- DocumentCache.java 10 Feb 2003 19:36:45 -0000 1.6.10.9
+++ DocumentCache.java 3 Mar 2003 15:51:39 -0000 1.6.10.10
@@ -139,7 +139,7 @@
final long stamp = System.currentTimeMillis();
_dom = (SAXImpl)dtmManager.getDTM(
new SAXSource(_reader, new
InputSource(uri)),
- false, null, true, false, false);
+ false, null, true, false);
_dom.setDocumentURI(uri);
// The build time can be used for statistics for a better
1.11.10.9 +3 -4
xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java
Index: LoadDocument.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java,v
retrieving revision 1.11.10.8
retrieving revision 1.11.10.9
diff -u -r1.11.10.8 -r1.11.10.9
--- LoadDocument.java 30 Jan 2003 18:41:47 -0000 1.11.10.8
+++ LoadDocument.java 3 Mar 2003 15:51:39 -0000 1.11.10.9
@@ -75,7 +75,6 @@
import org.apache.xalan.xsltc.runtime.AbstractTranslet;
import org.apache.xml.dtm.DTM;
import org.apache.xml.dtm.DTMAxisIterator;
-import org.apache.xml.dtm.DTMManager;
import org.apache.xml.dtm.ref.DTMDefaultBase;
import org.xml.sax.InputSource;
@@ -159,12 +158,12 @@
final XMLReader reader = parser.getXMLReader();
// Set the DOM's DOM builder as the XMLReader's SAX2 content
handler
- DTMManager dtmManager =
+ XSLTCDTMManager dtmManager = (XSLTCDTMManager)
((DTMDefaultBase)((DOMAdapter)multiplexer.getMain())
.getDOMImpl()).m_mgr;
newdom = (SAXImpl)dtmManager.getDTM(
new SAXSource(reader, new InputSource(uri)),
- false, null, true, false);
+ false, null, true, false,
translet.hasIdCall());
translet.prepassDocument(newdom);
1.1.2.38 +8 -7
xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java
Index: SAXImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java,v
retrieving revision 1.1.2.37
retrieving revision 1.1.2.38
diff -u -r1.1.2.37 -r1.1.2.38
--- SAXImpl.java 28 Feb 2003 16:31:05 -0000 1.1.2.37
+++ SAXImpl.java 3 Mar 2003 15:51:39 -0000 1.1.2.38
@@ -1040,10 +1040,10 @@
public SAXImpl(DTMManager mgr, Source saxSource,
int dtmIdentity, DTMWSFilter whiteSpaceFilter,
XMLStringFactory xstringfactory,
- boolean doIndexing)
+ boolean doIndexing, boolean buildIdIndex)
{
this(mgr, saxSource, dtmIdentity, whiteSpaceFilter, xstringfactory,
- doIndexing, DEFAULT_BLOCKSIZE);
+ doIndexing, DEFAULT_BLOCKSIZE, buildIdIndex);
}
/**
@@ -1052,10 +1052,11 @@
public SAXImpl(DTMManager mgr, Source saxSource,
int dtmIdentity, DTMWSFilter whiteSpaceFilter,
XMLStringFactory xstringfactory,
- boolean doIndexing, int blocksize)
+ boolean doIndexing, int blocksize,
+ boolean buildIdIndex)
{
super(mgr, saxSource, dtmIdentity, whiteSpaceFilter, xstringfactory,
- doIndexing, blocksize, false);
+ doIndexing, blocksize, false, buildIdIndex);
_size = blocksize;
@@ -2120,8 +2121,8 @@
public DOM getResultTreeFrag(int initSize)
{
return (SAXImpl) ((XSLTCDTMManager)m_mgr).getDTM(null, true, m_wsfilter,
- false, false, false,
- initSize);
+ true, false, false,
+ initSize,
m_buildIdIndex);
}
/**
1.1.2.11 +14 -19
xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/XSLTCDTMManager.java
Index: XSLTCDTMManager.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/XSLTCDTMManager.java,v
retrieving revision 1.1.2.10
retrieving revision 1.1.2.11
diff -u -r1.1.2.10 -r1.1.2.11
--- XSLTCDTMManager.java 11 Feb 2003 21:39:35 -0000 1.1.2.10
+++ XSLTCDTMManager.java 3 Mar 2003 15:51:39 -0000 1.1.2.11
@@ -62,13 +62,9 @@
import javax.xml.transform.stream.StreamSource;
import org.apache.xml.dtm.DTM;
-import org.apache.xml.dtm.DTMConfigurationException;
import org.apache.xml.dtm.DTMException;
-import org.apache.xml.dtm.DTMManager;
import org.apache.xml.dtm.DTMWSFilter;
import org.apache.xml.dtm.ref.DTMManagerDefault;
-import org.apache.xml.dtm.ref.IncrementalSAXSource;
-import org.apache.xml.dtm.ref.IncrementalSAXSource_Filter;
import org.apache.xml.res.XMLErrorResources;
import org.apache.xml.res.XMLMessages;
import org.apache.xml.utils.SystemIDResolver;
@@ -111,9 +107,9 @@
* This static method creates a new factory instance.
* The current implementation just returns a new XSLTCDTMManager instance.
*/
- public static DTMManager newInstance()
+ public static XSLTCDTMManager newInstance()
{
- DTMManager factoryImpl = new XSLTCDTMManager();
+ XSLTCDTMManager factoryImpl = new XSLTCDTMManager();
factoryImpl.setXMLStringFactory(new XMLStringFactoryDefault());
return factoryImpl;
@@ -177,9 +173,9 @@
boolean doIndexing)
{
return getDTM(source, unique, whiteSpaceFilter, incremental, doIndexing,
- false, 0);
+ false, 0, true);
}
-
+
/**
* Get an instance of a DTM, loaded with the content from the
* specified source. If the unique flag is true, a new instance will
@@ -198,21 +194,18 @@
* possible.
* @param doIndexing true if the caller considers it worth it to use
* indexing schemes.
- * @param hasUserReader true if <code>source</code> is a
- * <code>SAXSource</code> object that has an
- * <code>XMLReader</code>, that was specified by the
- * user.
- *
+ * @param buildIdIndex true if the id index table should be built.
+ *
* @return a non-null DTM reference.
*/
public DTM getDTM(Source source, boolean unique,
DTMWSFilter whiteSpaceFilter, boolean incremental,
- boolean doIndexing, boolean hasUserReader)
+ boolean doIndexing, boolean buildIdIndex)
{
return getDTM(source, unique, whiteSpaceFilter, incremental, doIndexing,
- hasUserReader, 0);
+ false, 0, buildIdIndex);
}
-
+
/**
* Get an instance of a DTM, loaded with the content from the
* specified source. If the unique flag is true, a new instance will
@@ -236,12 +229,14 @@
* <code>XMLReader</code>, that was specified by the
* user.
* @param size Specifies initial size of tables that represent the DTM
+ * @param buildIdIndex true if the id index table should be built.
*
* @return a non-null DTM reference.
*/
public DTM getDTM(Source source, boolean unique,
DTMWSFilter whiteSpaceFilter, boolean incremental,
- boolean doIndexing, boolean hasUserReader, int size)
+ boolean doIndexing, boolean hasUserReader, int size,
+ boolean buildIdIndex)
{
if(DEBUG && null != source)
@@ -323,10 +318,10 @@
SAXImpl dtm;
if (size <= 0) {
dtm = new SAXImpl(this, source, documentID, whiteSpaceFilter,
- null, doIndexing);
+ null, doIndexing, buildIdIndex);
} else {
dtm = new SAXImpl(this, source, documentID, whiteSpaceFilter,
- null, doIndexing, size);
+ null, doIndexing, size, buildIdIndex);
}
// Go ahead and add the DTM to the lookup table. This needs to be
No revision
No revision
1.33.2.9 +8 -1
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
Index: AbstractTranslet.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
retrieving revision 1.33.2.8
retrieving revision 1.33.2.9
diff -u -r1.33.2.8 -r1.33.2.9
--- AbstractTranslet.java 30 Jan 2003 18:41:48 -0000 1.33.2.8
+++ AbstractTranslet.java 3 Mar 2003 15:51:41 -0000 1.33.2.9
@@ -101,6 +101,9 @@
// DOM/translet handshaking - the arrays are set by the compiled translet
protected String[] namesArray;
protected String[] namespaceArray;
+
+ // Boolean flag to indicate whether this translet has id functions.
+ protected boolean _hasIdCall = false;
// TODO - these should only be instanciated when needed
protected StringValueHandler stringValueHandler = new
StringValueHandler();
@@ -618,5 +621,9 @@
}
public String[] getNamespaceArray() {
return namespaceArray;
+ }
+
+ public boolean hasIdCall() {
+ return _hasIdCall;
}
}
1.35.2.17 +1 -2
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
Index: BasisLibrary.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
retrieving revision 1.35.2.16
retrieving revision 1.35.2.17
diff -u -r1.35.2.16 -r1.35.2.17
--- BasisLibrary.java 11 Feb 2003 21:39:35 -0000 1.35.2.16
+++ BasisLibrary.java 3 Mar 2003 15:51:41 -0000 1.35.2.17
@@ -88,7 +88,6 @@
import org.apache.xalan.xsltc.dom.MultiDOM;
import org.apache.xalan.xsltc.dom.SingletonIterator;
import org.apache.xalan.xsltc.dom.StepIterator;
-import org.apache.xalan.xsltc.dom.XSLTCDTMManager;
import org.apache.xml.dtm.DTMAxisIterator;
import org.apache.xml.dtm.DTMManager;
import org.apache.xml.dtm.ref.DTMDefaultBase;
No revision
No revision
1.6.10.13 +5 -4
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java
Index: TransformerHandlerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java,v
retrieving revision 1.6.10.12
retrieving revision 1.6.10.13
diff -u -r1.6.10.12 -r1.6.10.13
--- TransformerHandlerImpl.java 10 Feb 2003 19:36:45 -0000
1.6.10.12
+++ TransformerHandlerImpl.java 3 Mar 2003 15:51:41 -0000
1.6.10.13
@@ -74,7 +74,6 @@
import org.apache.xalan.xsltc.dom.SAXImpl;
import org.apache.xalan.xsltc.dom.XSLTCDTMManager;
import org.apache.xalan.xsltc.runtime.AbstractTranslet;
-import org.apache.xml.dtm.DTMManager;
import org.apache.xml.dtm.DTMWSFilter;
import org.xml.sax.Attributes;
@@ -219,7 +218,7 @@
if (!_isIdentity) {
// Create an internal DOM (not W3C) and get SAX2 input handler
- DTMManager dtmManager = XSLTCDTMManager.newInstance();
+ XSLTCDTMManager dtmManager = XSLTCDTMManager.newInstance();
DTMWSFilter wsFilter;
if (_translet != null && _translet instanceof StripFilter) {
@@ -227,9 +226,11 @@
} else {
wsFilter = null;
}
+
+ boolean hasIdCall = (_translet != null) ? _translet.hasIdCall()
: false;
// Construct the DTM using the SAX events that come through
_dom = (SAXImpl)dtmManager.getDTM(null, false, wsFilter, true,
- false);
+ false, hasIdCall);
_handler = _dom.getBuilder();
_lexHandler = (LexicalHandler) _handler;
_dtdHandler = (DTDHandler) _handler;
1.37.2.18 +8 -6
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java
Index: TransformerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java,v
retrieving revision 1.37.2.17
retrieving revision 1.37.2.18
diff -u -r1.37.2.17 -r1.37.2.18
--- TransformerImpl.java 10 Feb 2003 19:36:45 -0000 1.37.2.17
+++ TransformerImpl.java 3 Mar 2003 15:51:41 -0000 1.37.2.18
@@ -436,7 +436,9 @@
} else {
wsfilter = null;
}
-
+
+ boolean hasIdCall = (_translet != null) ? _translet.hasIdCall()
+ : false;
// Get systemId from source
if (source != null) {
_sourceSystemId = source.getSystemId();
@@ -461,7 +463,7 @@
//dtmManager.setIncremental(_isIncremental);
dom = (SAXImpl)dtmManager.getDTM(sax, false, wsfilter, true,
false,
- hasUserReader);
+ hasUserReader, 0,
hasIdCall);
final DOMBuilder builder = ((SAXImpl)dom).getBuilder();
try {
reader.setProperty(LEXICAL_HANDLER_PROPERTY, builder);
@@ -482,7 +484,7 @@
//dtmManager.setIncremental(_isIncremental);
dom = (DOMImpl)dtmManager.getDTM(domsrc, false, wsfilter, true,
- false, false);
+ false, hasIdCall);
((DOMImpl)dom).setDocumentURI(_sourceSystemId);
}
// Handle StreamSource input
@@ -516,8 +518,8 @@
throw new TransformerException(err.toString());
}
dom = (SAXImpl)dtmManager.getDTM(new SAXSource(reader, input),
- false, wsfilter, true,
false,
- false);
+ false, wsfilter, true,
+ false, hasIdCall);
((SAXImpl)dom).setDocumentURI(_sourceSystemId);
}
else if (source instanceof XSLTCSource) {
1.3.10.7 +3 -3
xml-xalan/java/src/org/apache/xalan/xsltc/trax/XSLTCSource.java
Index: XSLTCSource.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/XSLTCSource.java,v
retrieving revision 1.3.10.6
retrieving revision 1.3.10.7
diff -u -r1.3.10.6 -r1.3.10.7
--- XSLTCSource.java 10 Feb 2003 19:36:46 -0000 1.3.10.6
+++ XSLTCSource.java 3 Mar 2003 15:51:41 -0000 1.3.10.7
@@ -104,7 +104,7 @@
int dtmPos = ((DTMManagerDefault)dtmManager).getFirstFreeDTMID();
int documentID = dtmPos << DTMManager.IDENT_DTM_NODE_BITS;
_dom = (DOM)new SAXImpl(dtmManager, this, documentID, null,
- null, true, size);
+ null, false, size, true);
((DTMManagerDefault)dtmManager).addDTM((DTM)_dom, dtmPos);
}
@@ -118,7 +118,7 @@
int dtmPos = ((DTMManagerDefault)dtmManager).getFirstFreeDTMID();
int documentID = dtmPos << DTMManager.IDENT_DTM_NODE_BITS;
_dom = (DOM)new SAXImpl(dtmManager, this, documentID, null,
- null, true);
+ null, false, true);
((DTMManagerDefault)dtmManager).addDTM((DTM)_dom, dtmPos);
}
No revision
No revision
1.28.2.17 +3 -3
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java
Index: DTMDefaultBase.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java,v
retrieving revision 1.28.2.16
retrieving revision 1.28.2.17
diff -u -r1.28.2.16 -r1.28.2.17
--- DTMDefaultBase.java 28 Feb 2003 17:25:26 -0000 1.28.2.16
+++ DTMDefaultBase.java 3 Mar 2003 15:51:42 -0000 1.28.2.17
@@ -124,13 +124,13 @@
protected int[][][] m_elemIndexes;
/** The default block size of the node arrays */
- protected static final int DEFAULT_BLOCKSIZE = 512; // favor small docs.
+ public static final int DEFAULT_BLOCKSIZE = 512; // favor small docs.
/** The number of blocks for the node arrays */
- protected static final int DEFAULT_NUMBLOCKS = 32;
+ public static final int DEFAULT_NUMBLOCKS = 32;
/** The number of blocks used for small documents & RTFs */
- protected static final int DEFAULT_NUMBLOCKS_SMALL = 4;
+ public static final int DEFAULT_NUMBLOCKS_SMALL = 4;
/** The block size of the node arrays */
//protected final int m_blocksize;
No revision
No revision
1.1.2.23 +11 -8
xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java
Index: SAX2DTM2.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java,v
retrieving revision 1.1.2.22
retrieving revision 1.1.2.23
diff -u -r1.1.2.22 -r1.1.2.23
--- SAX2DTM2.java 28 Feb 2003 16:31:20 -0000 1.1.2.22
+++ SAX2DTM2.java 3 Mar 2003 15:51:43 -0000 1.1.2.23
@@ -1728,6 +1728,8 @@
protected int m_SHIFT;
protected int m_MASK;
protected int m_blocksize;
+
+ protected boolean m_buildIdIndex = true;
// A constant for empty string
private static final String EMPTY_STR = "";
@@ -1742,7 +1744,7 @@
{
this(mgr, source, dtmIdentity, whiteSpaceFilter,
- xstringfactory, doIndexing, DEFAULT_BLOCKSIZE, true);
+ xstringfactory, doIndexing, DEFAULT_BLOCKSIZE, true, true);
}
/**
@@ -1753,7 +1755,8 @@
XMLStringFactory xstringfactory,
boolean doIndexing,
int blocksize,
- boolean usePrevsib)
+ boolean usePrevsib,
+ boolean buildIdIndex)
{
super(mgr, source, dtmIdentity, whiteSpaceFilter,
@@ -1767,6 +1770,8 @@
m_SHIFT = shift;
m_MASK = m_blocksize - 1;
+ m_buildIdIndex = buildIdIndex;
+
// Set the map0 values in the constructor.
m_exptype_map0 = m_exptype.getMap0();
m_nextsib_map0 = m_nextsib.getMap0();
@@ -1992,16 +1997,15 @@
String attrQName = attributes.getQName(i);
String valString = attributes.getValue(i);
- prefix = getPrefix(attrQName, attrUri);
-
int nodeType;
- String attrLocalName = attributes.getLocalName(i);
+ String attrLocalName = attributes.getLocalName(i);
if ((null != attrQName)
&& (attrQName.equals("xmlns")
|| attrQName.startsWith("xmlns:")))
{
+ prefix = getPrefix(attrQName, attrUri);
if (declAlreadyDeclared(prefix))
continue; // go to the next attribute.
@@ -2011,7 +2015,7 @@
{
nodeType = DTM.ATTRIBUTE_NODE;
- if (attributes.getType(i).equalsIgnoreCase("ID"))
+ if (m_buildIdIndex && attributes.getType(i).equalsIgnoreCase("ID"))
setIDAttribute(valString, elemNode);
}
@@ -2021,9 +2025,8 @@
valString = "";
int val = m_valuesOrPrefixes.stringToIndex(valString);
- //String attrLocalName = attributes.getLocalName(i);
- if (null != prefix)
+ if (attrLocalName.length() != attrQName.length())
{
prefixIndex = m_valuesOrPrefixes.stringToIndex(attrQName);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]