[146849] org.eclipse.jface.text.TextViewer.shiftLeft required too much time
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java index ccacf5a..cc42573 100644 --- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java +++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
@@ -51,7 +51,9 @@ import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; +import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.cleanup.StructuredContentCleanupHandler; +import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; import org.eclipse.wst.sse.core.internal.undo.IDocumentSelectionMediator; import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager; @@ -505,7 +507,7 @@ case SHIFT_RIGHT : beginRecording(TEXT_SHIFT_RIGHT, TEXT_SHIFT_RIGHT, cursorPosition, selectionLength); updateIndentationPrefixes(); - super.doOperation(SHIFT_RIGHT); + doModelOperation(SHIFT_RIGHT); selection = getTextWidget().getSelection(); cursorPosition = selection.x; selectionLength = selection.y - selection.x; @@ -514,7 +516,7 @@ case SHIFT_LEFT : beginRecording(TEXT_SHIFT_LEFT, TEXT_SHIFT_LEFT, cursorPosition, selectionLength); updateIndentationPrefixes(); - super.doOperation(SHIFT_LEFT); + doModelOperation(SHIFT_LEFT); selection = getTextWidget().getSelection(); cursorPosition = selection.x; selectionLength = selection.y - selection.x; @@ -643,6 +645,21 @@ } } + /** + * Perform the operation under a model change event + * @param operation the operation to perform + */ + private void doModelOperation(int operation) { + IStructuredModel model = StructuredModelManager.getModelManager().getModelForRead((IStructuredDocument) getDocument()); + model.aboutToChangeModel(); + try { + super.doOperation(operation); + } + finally { + model.changedModel(); + } + } + private void endRecording(int cursorPosition, int selectionLength) { IDocument doc = getDocument(); if (doc instanceof IStructuredDocument) {