[nobug] start and end a rewrite session if one is not active
diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/XMLFormatterFormatProcessor.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/XMLFormatterFormatProcessor.java
index e1bd645..b12f3f5 100644
--- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/XMLFormatterFormatProcessor.java
+++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/formatter/XMLFormatterFormatProcessor.java
@@ -15,7 +15,11 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.text.DocumentRewriteSession;
+import org.eclipse.jface.text.DocumentRewriteSessionType;
import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension4;
import org.eclipse.text.edits.TextEdit;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.format.IStructuredFormatProcessor;
@@ -84,16 +88,40 @@
}
public void formatModel(IStructuredModel structuredModel, int start, int length) {
+ if(fProgressMonitor != null)
+ fProgressMonitor.beginTask("", 2);
+ IStructuredDocument structuredDocument = structuredModel.getStructuredDocument();
+ DocumentRewriteSession activeRewriteSession = ((IDocumentExtension4) structuredDocument).getActiveRewriteSession();
+ boolean startedRewriteSession = false;
+ if (activeRewriteSession == null) {
+ activeRewriteSession = ((IDocumentExtension4) structuredDocument).startRewriteSession(DocumentRewriteSessionType.SEQUENTIAL);
+ startedRewriteSession = true;
+ }
+ getFormatter().setProgressMonitor(new NullProgressMonitor() {
+ public boolean isCanceled() {
+ return fProgressMonitor != null && fProgressMonitor.isCanceled();
+ }
+ });
TextEdit edit = getFormatter().format(structuredModel, start, length);
+ if(fProgressMonitor != null)
+ fProgressMonitor.worked(1);
+
try {
structuredModel.aboutToChangeModel();
- edit.apply(structuredModel.getStructuredDocument());
+ edit.apply(structuredDocument);
+ if(fProgressMonitor != null)
+ fProgressMonitor.worked(1);
}
catch (Exception e) {
Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e);
}
finally {
+ if (startedRewriteSession && activeRewriteSession != null) {
+ ((IDocumentExtension4) structuredDocument).stopRewriteSession(activeRewriteSession);
+ }
structuredModel.changedModel();
+ if(fProgressMonitor != null)
+ fProgressMonitor.done();
}
}
@@ -106,7 +134,6 @@
public void setProgressMonitor(IProgressMonitor monitor) {
fProgressMonitor = monitor;
- getFormatter().setProgressMonitor(fProgressMonitor);
}
private DefaultXMLPartitionFormatter getFormatter() {