### Eclipse Workspace Patch 1.0 #P org.eclipse.jface.text Index: projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java,v retrieving revision 1.103 diff -u -r1.103 ProjectionViewer.java --- projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java 2 Oct 2008 15:40:41 -0000 1.103 +++ projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java 3 Oct 2008 15:16:58 -0000 @@ -30,10 +30,14 @@ import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.DocumentEvent; +import org.eclipse.jface.text.DocumentRewriteSessionEvent; +import org.eclipse.jface.text.DocumentRewriteSessionType; import org.eclipse.jface.text.FindReplaceDocumentAdapter; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IDocumentExtension4; import org.eclipse.jface.text.IDocumentInformationMappingExtension; import org.eclipse.jface.text.IDocumentListener; +import org.eclipse.jface.text.IDocumentRewriteSessionListener; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ISlaveDocumentManager; import org.eclipse.jface.text.ITextViewerExtension5; @@ -74,6 +78,7 @@ public class ProjectionViewer extends SourceViewer implements ITextViewerExtension5 { + private static final int BASE= INFORMATION; // see ISourceViewer.INFORMATION /** Operation constant for the expand operation. */ @@ -301,6 +306,28 @@ */ private int fDeletedLines; + /** + * The listener for document rewrite sessions. + * + * @since 3.5 + */ + private final IDocumentRewriteSessionListener fSessionListener= new ProjectionDocumentRewriteSessionListener(); + private class ProjectionDocumentRewriteSessionListener implements IDocumentRewriteSessionListener { + + private boolean fWasProjectionEnabledBeforeRewrite= false; + + public void documentRewriteSessionChanged(DocumentRewriteSessionEvent event) { + if (event.getSession().getSessionType() == DocumentRewriteSessionType.UNRESTRICTED_SMALL) + return; + if (DocumentRewriteSessionEvent.SESSION_START.equals(event.getChangeType())) { + fWasProjectionEnabledBeforeRewrite= isProjectionMode(); + disableProjection(); + } else if (DocumentRewriteSessionEvent.SESSION_STOP.equals(event.getChangeType())) + if (fWasProjectionEnabledBeforeRewrite) + enableProjection(); + } + } + /** * Creates a new projection source viewer. @@ -367,8 +394,19 @@ fProjectionAnnotationModel= null; } + IDocument oldDocument= getDocument(); + if (oldDocument instanceof IDocumentExtension4) { + IDocumentExtension4 ext= (IDocumentExtension4)oldDocument; + ext.removeDocumentRewriteSessionListener(fSessionListener); + } + super.setDocument(document, annotationModel, modelRangeOffset, modelRangeLength); + if (document instanceof IDocumentExtension4) { + IDocumentExtension4 ext= (IDocumentExtension4)document; + ext.addDocumentRewriteSessionListener(fSessionListener); + } + if (wasProjectionEnabled && document != null) enableProjection();