* @param removedPositions the removed positions
* @return the text presentation or <code>null</code>, if reconciliation should be canceled
*/
public TextPresentation createPresentation(List addedPositions, List removedPositions) {
ISourceViewer sourceViewer= fSourceViewer;
StructuredPresentationReconciler presentationReconciler= fPresentationReconciler;
if (sourceViewer == null || presentationReconciler == null)
return null;
if (isCanceled())
return null;
IDocument document= sourceViewer.getDocument();
if (document == null)
return null;
int minStart= Integer.MAX_VALUE;
int maxEnd= Integer.MIN_VALUE;
for (int i= 0, n= removedPositions.size(); i < n; i++) {
Position position= (Position) removedPositions.get(i);
int offset= position.getOffset();
minStart= Math.min(minStart, offset);
maxEnd= Math.max(maxEnd, offset + position.getLength());
}
for (int i= 0, n= addedPositions.size(); i < n; i++) {
Position position= (Position) addedPositions.get(i);
int offset= position.getOffset();
minStart= Math.min(minStart, offset);
maxEnd= Math.max(maxEnd, offset + position.getLength());
}
if (minStart < maxEnd)
try {
return presentationReconciler.createRepairDescription(new Region(minStart, maxEnd - minStart), document);
} catch (RuntimeException e) {
// Assume concurrent modification from UI thread
}
return null;