View | Details | Raw Unified | Return to bug 208263 | Differences between
and this patch

Collapse All | Expand All

(-)dom/org/eclipse/jdt/internal/core/dom/rewrite/RewriteEventStore.java (-48 / +68 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2006 IBM Corporation and others.
2
 * Copyright (c) 2000, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 13-19 Link Here
13
import java.util.*;
13
import java.util.*;
14
14
15
import org.eclipse.jdt.core.Signature;
15
import org.eclipse.jdt.core.Signature;
16
import org.eclipse.jdt.core.dom.*;
16
import org.eclipse.jdt.core.dom.ASTNode;
17
import org.eclipse.jdt.core.dom.Block;
18
import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
17
import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
19
import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
18
import org.eclipse.text.edits.TextEditGroup;
20
import org.eclipse.text.edits.TextEditGroup;
19
21
Lines 223-229 Link Here
223
		private Iterator trackedNodeIter;
225
		private Iterator trackedNodeIter;
224
		
226
		
225
		public ParentIterator() {
227
		public ParentIterator() {
226
			this.eventIter= RewriteEventStore.this.events.iterator();
228
			this.eventIter= RewriteEventStore.this.eventLookup.keySet().iterator();
227
			if (RewriteEventStore.this.nodeCopySources != null) {
229
			if (RewriteEventStore.this.nodeCopySources != null) {
228
				this.sourceNodeIter= RewriteEventStore.this.nodeCopySources.iterator();
230
				this.sourceNodeIter= RewriteEventStore.this.nodeCopySources.iterator();
229
			} else {
231
			} else {
Lines 253-259 Link Here
253
		 */
255
		 */
254
		public Object next() {
256
		public Object next() {
255
			if (this.eventIter.hasNext()) {
257
			if (this.eventIter.hasNext()) {
256
				return ((EventHolder) this.eventIter.next()).parent;
258
				return this.eventIter.next();
257
			}
259
			}
258
			if (this.sourceNodeIter.hasNext()) {
260
			if (this.sourceNodeIter.hasNext()) {
259
				return ((CopySourceInfo) this.sourceNodeIter.next()).getNode();
261
				return ((CopySourceInfo) this.sourceNodeIter.next()).getNode();
Lines 276-284 Link Here
276
	public final static int ORIGINAL= 2;
278
	public final static int ORIGINAL= 2;
277
	public final static int BOTH= NEW | ORIGINAL;
279
	public final static int BOTH= NEW | ORIGINAL;
278
		
280
		
279
	
281
		
280
	/** all events */
282
	/** all events by parent*/
281
	final List events;
283
	final Map eventLookup;
282
	
284
	
283
	/** cache for last accessed event */
285
	/** cache for last accessed event */
284
	private EventHolder lastEvent;
286
	private EventHolder lastEvent;
Lines 305-311 Link Here
305
	private static final String INTERNAL_PLACEHOLDER_PROPERTY= "rewrite_internal_placeholder"; //$NON-NLS-1$
307
	private static final String INTERNAL_PLACEHOLDER_PROPERTY= "rewrite_internal_placeholder"; //$NON-NLS-1$
306
		
308
		
307
	public RewriteEventStore() {
309
	public RewriteEventStore() {
308
		this.events= new ArrayList();
310
		this.eventLookup= new HashMap();
309
		this.lastEvent= null;
311
		this.lastEvent= null;
310
		
312
		
311
		this.editGroups= null; // lazy initialization
313
		this.editGroups= null; // lazy initialization
Lines 328-334 Link Here
328
	}
330
	}
329
	
331
	
330
	public void clear() {
332
	public void clear() {
331
		this.events.clear();
333
		this.eventLookup.clear();
332
		this.lastEvent= null;
334
		this.lastEvent= null;
333
		this.trackedNodes= null;
335
		this.trackedNodes= null;
334
		
336
		
Lines 346-361 Link Here
346
		
348
		
347
		EventHolder holder= new EventHolder(parent, childProperty, event);
349
		EventHolder holder= new EventHolder(parent, childProperty, event);
348
		
350
		
349
		// check if already in list
351
		List entriesList = (List) this.eventLookup.get(parent);
350
		for (int i= 0; i < this.events.size(); i++) {
352
		if (entriesList != null) {
351
			EventHolder curr= (EventHolder) this.events.get(i);
353
			for (int i= 0; i < entriesList.size(); i++) {
352
			if (curr.parent == parent && curr.childProperty == childProperty) {
354
				EventHolder curr= (EventHolder) entriesList.get(i);
353
				this.events.set(i, holder);
355
				if (curr.childProperty == childProperty) {
354
				this.lastEvent= null;
356
					entriesList.set(i, holder);
355
				return;
357
					this.lastEvent= null;
358
					return;
359
				}
356
			}
360
			}
361
		} else {
362
			entriesList= new ArrayList(3);
363
			this.eventLookup.put(parent, entriesList);
357
		}
364
		}
358
		this.events.add(holder);
365
		entriesList.add(holder);
359
	}
366
	}
360
	
367
	
361
	public RewriteEvent getEvent(ASTNode parent, StructuralPropertyDescriptor property) {
368
	public RewriteEvent getEvent(ASTNode parent, StructuralPropertyDescriptor property) {
Lines 365-375 Link Here
365
			return this.lastEvent.event;
372
			return this.lastEvent.event;
366
		}
373
		}
367
		
374
		
368
		for (int i= 0; i < this.events.size(); i++) {
375
		List entriesList = (List) this.eventLookup.get(parent);
369
			EventHolder holder= (EventHolder) this.events.get(i);
376
		if (entriesList != null) {
370
			if (holder.parent == parent && holder.childProperty == property) {
377
			for (int i= 0; i < entriesList.size(); i++) {
371
				this.lastEvent= holder;
378
				EventHolder holder= (EventHolder) entriesList.get(i);
372
				return holder.event;
379
				if (holder.childProperty == property) {
380
					this.lastEvent= holder;
381
					return holder.event;
382
				}
373
			}
383
			}
374
		}
384
		}
375
		return null;
385
		return null;
Lines 403-411 Link Here
403
	
413
	
404
	
414
	
405
	public boolean hasChangedProperties(ASTNode parent) {
415
	public boolean hasChangedProperties(ASTNode parent) {
406
		for (int i= 0; i < this.events.size(); i++) {
416
		List entriesList = (List) this.eventLookup.get(parent);
407
			EventHolder holder= (EventHolder) this.events.get(i);
417
		if (entriesList != null) {
408
			if (holder.parent == parent) {
418
			for (int i= 0; i < entriesList.size(); i++) {
419
				EventHolder holder= (EventHolder) entriesList.get(i);
409
				if (holder.event.getChangeKind() != RewriteEvent.UNCHANGED) {
420
				if (holder.event.getChangeKind() != RewriteEvent.UNCHANGED) {
410
					return true;
421
					return true;
411
				}
422
				}
Lines 415-431 Link Here
415
	}
426
	}
416
	
427
	
417
	public PropertyLocation getPropertyLocation(Object value, int kind) {
428
	public PropertyLocation getPropertyLocation(Object value, int kind) {
418
		for (int i= 0; i < this.events.size(); i++) {
429
		for (Iterator iter= this.eventLookup.values().iterator(); iter.hasNext();) {
419
			EventHolder holder= (EventHolder) this.events.get(i);
430
			List events= (List) iter.next();
420
			RewriteEvent event= holder.event;
431
			for (int i= 0; i < events.size(); i++) {
421
			if (isNodeInEvent(event, value, kind)) {
432
				EventHolder holder= (EventHolder) events.get(i);
422
				return new PropertyLocation(holder.parent, holder.childProperty);
433
				RewriteEvent event= holder.event;
423
			}
434
				if (isNodeInEvent(event, value, kind)) {
424
			if (event.isListRewrite()) {
435
					return new PropertyLocation(holder.parent, holder.childProperty);
425
				RewriteEvent[] children= event.getChildren();
436
				}
426
				for (int k= 0; k < children.length; k++) {
437
				if (event.isListRewrite()) {
427
					if (isNodeInEvent(children[k], value, kind)) {
438
					RewriteEvent[] children= event.getChildren();
428
						return new PropertyLocation(holder.parent, holder.childProperty);
439
					for (int k= 0; k < children.length; k++) {
440
						if (isNodeInEvent(children[k], value, kind)) {
441
							return new PropertyLocation(holder.parent, holder.childProperty);
442
						}
429
					}
443
					}
430
				}
444
				}
431
			}
445
			}
Lines 445-460 Link Here
445
	 * @return Returns the event with the given value of <code>null</code>.
459
	 * @return Returns the event with the given value of <code>null</code>.
446
	 */
460
	 */
447
	public RewriteEvent findEvent(Object value, int kind) {
461
	public RewriteEvent findEvent(Object value, int kind) {
448
		for (int i= 0; i < this.events.size(); i++) {
462
		for (Iterator iter= this.eventLookup.values().iterator(); iter.hasNext();) {
449
			RewriteEvent event= ((EventHolder) this.events.get(i)).event;
463
			List events= (List) iter.next();
450
			if (isNodeInEvent(event, value, kind)) {
464
			for (int i= 0; i < events.size(); i++) {
451
				return event;
465
				RewriteEvent event= ((EventHolder) events.get(i)).event;
452
			}
466
				if (isNodeInEvent(event, value, kind)) {
453
			if (event.isListRewrite()) {
467
					return event;
454
				RewriteEvent[] children= event.getChildren();
468
				}
455
				for (int k= 0; k < children.length; k++) {
469
				if (event.isListRewrite()) {
456
					if (isNodeInEvent(children[k], value, kind)) {
470
					RewriteEvent[] children= event.getChildren();
457
						return children[k];
471
					for (int k= 0; k < children.length; k++) {
472
						if (isNodeInEvent(children[k], value, kind)) {
473
							return children[k];
474
						}
458
					}
475
					}
459
				}
476
				}
460
			}
477
			}
Lines 823-830 Link Here
823
	
840
	
824
	public String toString() {
841
	public String toString() {
825
		StringBuffer buf= new StringBuffer();
842
		StringBuffer buf= new StringBuffer();
826
		for (int i= 0; i < this.events.size(); i++) {
843
		for (Iterator iter = this.eventLookup.values().iterator(); iter.hasNext();) {
827
			buf.append(this.events.get(i).toString()).append('\n');
844
			List events = (List) iter.next();
845
			for (int i= 0; i < events.size(); i++) {
846
				buf.append(events.get(i).toString()).append('\n');
847
			}
828
		}
848
		}
829
		return buf.toString();
849
		return buf.toString();
830
	}
850
	}

Return to bug 208263