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]

Reply via email to