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 |
} |