### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: dom/org/eclipse/jdt/internal/core/dom/rewrite/RewriteEventStore.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/RewriteEventStore.java,v retrieving revision 1.4.2.3 diff -u -r1.4.2.3 RewriteEventStore.java --- dom/org/eclipse/jdt/internal/core/dom/rewrite/RewriteEventStore.java 31 Jan 2005 11:31:54 -0000 1.4.2.3 +++ dom/org/eclipse/jdt/internal/core/dom/rewrite/RewriteEventStore.java 31 Oct 2007 16:07:11 -0000 @@ -14,6 +14,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; import java.util.Iterator; @@ -160,7 +161,7 @@ private Iterator trackedNodeIter; public ParentIterator() { - this.eventIter= RewriteEventStore.this.events.iterator(); + this.eventIter= RewriteEventStore.this.eventLookup.keySet().iterator(); if (RewriteEventStore.this.nodeCopySources != null) { this.sourceNodeIter= RewriteEventStore.this.nodeCopySources.iterator(); } else { @@ -190,7 +191,7 @@ */ public Object next() { if (this.eventIter.hasNext()) { - return ((EventHolder) this.eventIter.next()).parent; + return this.eventIter.next(); } if (this.sourceNodeIter.hasNext()) { return ((CopySourceInfo) this.sourceNodeIter.next()).getStartNode(); @@ -213,9 +214,9 @@ public final static int ORIGINAL= 2; public final static int BOTH= NEW | ORIGINAL; - - /** all events */ - final List events; + + /** all events by parent*/ + final Map eventLookup; /** cache for last accessed event */ private EventHolder lastEvent; @@ -240,7 +241,7 @@ private INodePropertyMapper nodePropertyMapper; public RewriteEventStore() { - this.events= new ArrayList(); + this.eventLookup= new HashMap(); this.lastEvent= null; this.editGroups= null; // lazy initialization @@ -262,7 +263,7 @@ } public void clear() { - this.events.clear(); + this.eventLookup.clear(); this.lastEvent= null; this.trackedNodes= null; @@ -280,16 +281,21 @@ EventHolder holder= new EventHolder(parent, childProperty, event); - // check if already in list - for (int i= 0; i < this.events.size(); i++) { - EventHolder curr= (EventHolder) this.events.get(i); - if (curr.parent == parent && curr.childProperty == childProperty) { - this.events.set(i, holder); - this.lastEvent= null; - return; + List entriesList = (List) this.eventLookup.get(parent); + if (entriesList != null) { + for (int i= 0; i < entriesList.size(); i++) { + EventHolder curr= (EventHolder) entriesList.get(i); + if (curr.childProperty == childProperty) { + entriesList.set(i, holder); + this.lastEvent= null; + return; + } } + } else { + entriesList= new ArrayList(3); + this.eventLookup.put(parent, entriesList); } - this.events.add(holder); + entriesList.add(holder); } public RewriteEvent getEvent(ASTNode parent, StructuralPropertyDescriptor property) { @@ -299,11 +305,14 @@ return this.lastEvent.event; } - for (int i= 0; i < this.events.size(); i++) { - EventHolder holder= (EventHolder) this.events.get(i); - if (holder.parent == parent && holder.childProperty == property) { - this.lastEvent= holder; - return holder.event; + List entriesList = (List) this.eventLookup.get(parent); + if (entriesList != null) { + for (int i= 0; i < entriesList.size(); i++) { + EventHolder holder= (EventHolder) entriesList.get(i); + if (holder.childProperty == property) { + this.lastEvent= holder; + return holder.event; + } } } return null; @@ -337,9 +346,10 @@ public boolean hasChangedProperties(ASTNode parent) { - for (int i= 0; i < this.events.size(); i++) { - EventHolder holder= (EventHolder) this.events.get(i); - if (holder.parent == parent) { + List entriesList = (List) this.eventLookup.get(parent); + if (entriesList != null) { + for (int i= 0; i < entriesList.size(); i++) { + EventHolder holder= (EventHolder) entriesList.get(i); if (holder.event.getChangeKind() != RewriteEvent.UNCHANGED) { return true; } @@ -349,17 +359,20 @@ } public PropertyLocation getPropertyLocation(Object value, int kind) { - for (int i= 0; i < this.events.size(); i++) { - EventHolder holder= (EventHolder) this.events.get(i); - RewriteEvent event= holder.event; - if (isNodeInEvent(event, value, kind)) { - return new PropertyLocation(holder.parent, holder.childProperty); - } - if (event.isListRewrite()) { - RewriteEvent[] children= event.getChildren(); - for (int k= 0; k < children.length; k++) { - if (isNodeInEvent(children[k], value, kind)) { - return new PropertyLocation(holder.parent, holder.childProperty); + for (Iterator iter = this.eventLookup.values().iterator(); iter.hasNext();) { + List events = (List) iter.next(); + for (int i= 0; i < this.eventLookup.size(); i++) { + EventHolder holder= (EventHolder) events.get(i); + RewriteEvent event= holder.event; + if (isNodeInEvent(event, value, kind)) { + return new PropertyLocation(holder.parent, holder.childProperty); + } + if (event.isListRewrite()) { + RewriteEvent[] children= event.getChildren(); + for (int k= 0; k < children.length; k++) { + if (isNodeInEvent(children[k], value, kind)) { + return new PropertyLocation(holder.parent, holder.childProperty); + } } } } @@ -379,16 +392,19 @@ * @return RewriteEvent */ public RewriteEvent findEvent(Object value, int kind) { - for (int i= 0; i < this.events.size(); i++) { - RewriteEvent event= ((EventHolder) this.events.get(i)).event; - if (isNodeInEvent(event, value, kind)) { - return event; - } - if (event.isListRewrite()) { - RewriteEvent[] children= event.getChildren(); - for (int k= 0; k < children.length; k++) { - if (isNodeInEvent(children[k], value, kind)) { - return children[k]; + for (Iterator iter = this.eventLookup.values().iterator(); iter.hasNext();) { + List events = (List) iter.next(); + for (int i= 0; i < events.size(); i++) { + RewriteEvent event= ((EventHolder) events.get(i)).event; + if (isNodeInEvent(event, value, kind)) { + return event; + } + if (event.isListRewrite()) { + RewriteEvent[] children= event.getChildren(); + for (int k= 0; k < children.length; k++) { + if (isNodeInEvent(children[k], value, kind)) { + return children[k]; + } } } } @@ -625,8 +641,11 @@ public String toString() { StringBuffer buf= new StringBuffer(); - for (int i= 0; i < this.events.size(); i++) { - buf.append(this.events.get(i).toString()).append('\n'); + for (Iterator iter = this.eventLookup.values().iterator(); iter.hasNext();) { + List events = (List) iter.next(); + for (int i= 0; i < events.size(); i++) { + buf.append(events.get(i).toString()).append('\n'); + } } return buf.toString(); }