private void ProcessSimpleChange(TextChangeContext context) {
bool elementsRemoved = false;
try {
_editorTree.AcquireWriteLock();
elementsRemoved = DeleteAndShiftElements(context);
UpdateTreeTextSnapshot();
// If no elements were invalidated and full parse is not required, clear pending changes
if (!elementsRemoved) {
ClearChanges();
}
} finally {
_editorTree.ReleaseWriteLock();
}
if (!elementsRemoved) {
if (context.ChangedNode != null || context.PendingChanges.TextChangeType == TextChangeType.Trivial) {
_editorTree.FireOnPositionsOnlyChanged();
}
_editorTree.FireOnUpdateCompleted(TreeUpdateType.PositionsOnly);
} else {
_editorTree.FireOnUpdateCompleted(TreeUpdateType.NodesRemoved);
}
DebugTree.VerifyTree(_editorTree);
Debug.Assert(_editorTree.AstRoot.Children.Count > 0);
}