You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2009/01/02 18:36:41 UTC

svn commit: r730797 - in /xerces/java/branches/stax-dev/src/org/apache/xerces/stax: DefaultEventAllocator.java XMLEventFactoryImpl.java events/ElementImpl.java events/EndElementImpl.java events/StartElementImpl.java

Author: mrglavas
Date: Fri Jan  2 09:36:40 2009
New Revision: 730797

URL: http://svn.apache.org/viewvc?rev=730797&view=rev
Log:
Reducing object allocation and eliminating mutation methods.

Modified:
    xerces/java/branches/stax-dev/src/org/apache/xerces/stax/DefaultEventAllocator.java
    xerces/java/branches/stax-dev/src/org/apache/xerces/stax/XMLEventFactoryImpl.java
    xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/ElementImpl.java
    xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/EndElementImpl.java
    xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/StartElementImpl.java

Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/DefaultEventAllocator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/DefaultEventAllocator.java?rev=730797&r1=730796&r2=730797&view=diff
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/DefaultEventAllocator.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/DefaultEventAllocator.java Fri Jan  2 09:36:40 2009
@@ -17,6 +17,9 @@
 
 package org.apache.xerces.stax;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
 import javax.xml.stream.XMLStreamConstants;
@@ -83,7 +86,7 @@
             case XMLStreamConstants.END_DOCUMENT:
                 return new EndDocumentImpl(location);
             case XMLStreamConstants.END_ELEMENT:
-                return new EndElementImpl(reader.getName(), location);
+                return new EndElementImpl(reader.getName(), null, location);
             case XMLStreamConstants.ENTITY_REFERENCE:
                 //TODO: Get the EntityDeclaration.
                 return new EntityReferenceImpl(null, location);
@@ -122,15 +125,18 @@
         if (!streamReader.isStartElement()) {
             throw new IllegalStateException("makeStartElement must only be called when in the start element state.");
         }
-        
-        StartElementImpl startElement = new StartElementImpl(streamReader.getName(), streamReader.getNamespaceContext(), streamReader.getLocation());
-        for(int i = 0; i < streamReader.getAttributeCount(); i++) {
-            startElement.addAttribute(makeAttribute(i, streamReader));
+        final int attrLength = streamReader.getAttributeCount();
+        final List attributes = new ArrayList(attrLength);
+        for (int i = 0; i < attrLength; ++i) {
+            attributes.add(makeAttribute(i, streamReader));
         }
-        for(int i = 0; i < streamReader.getNamespaceCount(); i++) {
-            startElement.addNamespace(makeNamespace(i, streamReader));
+        final int nsLength = streamReader.getNamespaceCount();
+        final List namespaces = new ArrayList(nsLength);
+        for (int i = 0; i < nsLength; ++i) {
+            namespaces.add(makeNamespace(i, streamReader));
         }
-        return startElement;
+        return new StartElementImpl(streamReader.getName(), 
+                attributes.iterator(), namespaces.iterator(), streamReader.getNamespaceContext(), streamReader.getLocation());
     }
     
     /**

Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/XMLEventFactoryImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/XMLEventFactoryImpl.java?rev=730797&r1=730796&r2=730797&view=diff
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/XMLEventFactoryImpl.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/XMLEventFactoryImpl.java Fri Jan  2 09:36:40 2009
@@ -111,28 +111,11 @@
     
     private StartElement createStartElement(QName name, Iterator attributes,
             Iterator namespaces, NamespaceContext context) {
-        StartElementImpl start = new StartElementImpl(name, context, fLocation);
-        if (attributes != null) {
-            while (attributes.hasNext()) {
-                start.addAttribute((Attribute) attributes.next());
-            }
-        }
-        if (namespaces != null) {
-            while (namespaces.hasNext()) {
-                start.addNamespace((Namespace) namespaces.next());
-            }
-        }
-        return start;
+        return new StartElementImpl(name, attributes, namespaces, context, fLocation);
     }
 
     public EndElement createEndElement(QName name, Iterator namespaces) {
-        EndElementImpl end = new EndElementImpl(name, fLocation);
-        if (namespaces != null) {
-            while (namespaces.hasNext()) {
-                end.addNamespace((Namespace) namespaces.next());
-            }
-        }
-        return end;
+        return new EndElementImpl(name, namespaces, fLocation);
     }
 
     public EndElement createEndElement(String prefix, String namespaceUri,

Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/ElementImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/ElementImpl.java?rev=730797&r1=730796&r2=730797&view=diff
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/ElementImpl.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/ElementImpl.java Fri Jan  2 09:36:40 2009
@@ -18,6 +18,7 @@
 package org.apache.xerces.stax.events;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -43,14 +44,25 @@
     /**
      * Namespaces declared in the current scope.
      */
-    private final List fNamespaces = new ArrayList();
+    private final List fNamespaces;
     
     /**
      * Constructor.
      */
-    ElementImpl(final QName name, final boolean isStartElement, final Location location) {
+    ElementImpl(final QName name, final boolean isStartElement, Iterator namespaces, final Location location) {
         super(isStartElement ? START_ELEMENT : END_ELEMENT, location);
         fName = name;
+        if (namespaces != null && namespaces.hasNext()) {
+            fNamespaces = new ArrayList();
+            do {
+                Namespace ns = (Namespace) namespaces.next();
+                fNamespaces.add(ns);
+            }
+            while (namespaces.hasNext());
+        }
+        else {
+            fNamespaces = Collections.EMPTY_LIST;
+        }
     }
     
     /**
@@ -69,10 +81,6 @@
         return createImmutableIterator(fNamespaces.iterator());
     }
     
-    public final void addNamespace(final Namespace namespace) {
-        fNamespaces.add(namespace);
-    }
-    
     static Iterator createImmutableIterator(Iterator iter) {
         return new NoRemoveIterator(iter);
     }

Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/EndElementImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/EndElementImpl.java?rev=730797&r1=730796&r2=730797&view=diff
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/EndElementImpl.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/EndElementImpl.java Fri Jan  2 09:36:40 2009
@@ -19,6 +19,7 @@
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.Iterator;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
@@ -37,8 +38,8 @@
     /**
      * @param location The location object for this event.
      */
-    public EndElementImpl(final QName name, final Location location) {
-        super(name, false, location);
+    public EndElementImpl(final QName name, final Iterator namespaces, final Location location) {
+        super(name, false, namespaces, location);
     }
 
     public void writeAsEncodedUnicode(Writer writer) throws XMLStreamException {

Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/StartElementImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/StartElementImpl.java?rev=730797&r1=730796&r2=730797&view=diff
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/StartElementImpl.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/events/StartElementImpl.java Fri Jan  2 09:36:40 2009
@@ -19,6 +19,7 @@
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.Map;
@@ -43,23 +44,36 @@
  */
 public final class StartElementImpl extends ElementImpl implements StartElement {
 
-    private final Map fAttributes = new TreeMap(new Comparator(){
+    private static final Comparator QNAME_COMPARATOR = new Comparator() {
         public int compare(Object o1, Object o2) {
-            if(o1.equals(o2)) {
+            if (o1.equals(o2)) {
                 return 0;
             }
-            QName name1 = (QName)o1;
-            QName name2 = (QName)o2;
+            QName name1 = (QName) o1;
+            QName name2 = (QName) o2;
             return name1.toString().compareTo(name2.toString());
-        }});
+        }};
+
+    private final Map fAttributes;
     private final NamespaceContext fNamespaceContext;
 
     /**
      * @param location
      * @param schemaType
      */
-    public StartElementImpl(final QName name, final NamespaceContext namespaceContext, final Location location) {
-        super(name, true, location);
+    public StartElementImpl(final QName name, final Iterator attributes, final Iterator namespaces, final NamespaceContext namespaceContext, final Location location) {
+        super(name, true, namespaces, location);
+        if (attributes != null && attributes.hasNext()) {
+            fAttributes = new TreeMap(QNAME_COMPARATOR);
+            do {
+                Attribute attr = (Attribute) attributes.next();
+                fAttributes.put(attr.getName(), attr);
+            }
+            while (attributes.hasNext());
+        }
+        else {
+            fAttributes = Collections.EMPTY_MAP;
+        }
         fNamespaceContext = (namespaceContext != null) ? namespaceContext : DefaultNamespaceContext.getInstance();
     }
 
@@ -90,15 +104,11 @@
     public String getNamespaceURI(final String prefix) {
         return fNamespaceContext.getNamespaceURI(prefix);
     }
-
-    public void addAttribute(final Attribute attribute) {
-        fAttributes.put(attribute.getName(), attribute);
-    }
     
     public void writeAsEncodedUnicode(Writer writer) throws XMLStreamException {
         try {
             // Write start tag.
-            writer.write("<");
+            writer.write('<');
             QName name = getName();
             String prefix = name.getPrefix();
             if (prefix != null && prefix.length() > 0) {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org