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