Microsoft.R.Editor.Tree.EditorTree.FireOnUpdatesPending C# (CSharp) Method

FireOnUpdatesPending() private method

Fires 'tree updates pending' event on the main thread context
private FireOnUpdatesPending ( IReadOnlyCollection textChanges ) : void
textChanges IReadOnlyCollection List of pending changes
return void
        internal void FireOnUpdatesPending(IReadOnlyCollection<TextChangeEventArgs> textChanges) {
            if (_ownerThread != Thread.CurrentThread.ManagedThreadId) {
                Debug.Fail(_threadContextInvalidMessage);
                return;
            }

            try {
                UpdatesPending?.Invoke(this, new TreeUpdatePendingEventArgs(textChanges));
            } catch (Exception ex) {
                Debug.Assert(false, Invariant($"Exception thrown in a tree.UpdatesPending event handler: {ex.Message}"));
            }
        }

Usage Example

Example #1
0
        /// <summary>
        /// Text buffer change event handler. Performs analysis of the change.
        /// If change is trivial, such as change in whitespace (excluding line
        /// breaks that in R may be sensistive), simply applies the changes
        /// by shifting tree elements. If some elements get deleted or otherwise
        /// damaged, removes them from the tree right away. Non-trivial changes
        /// are queued for background parsing which starts on next on idle.
        /// Methond must be called on a main thread only, typically from an event
        /// handler that receives text buffer change events.
        /// </summary>
        internal void OnTextChanges(IReadOnlyCollection <TextChangeEventArgs> textChanges)
        {
            if (Thread.CurrentThread.ManagedThreadId != _ownerThreadId)
            {
                throw new ThreadStateException("Method should only be called on the main thread");
            }

            _editorTree.FireOnUpdatesPending(textChanges);
            if (UpdatesSuspended)
            {
                this.TextBufferChangedSinceSuspend = true;
                _pendingChanges.FullParseRequired  = true;
            }
            else
            {
                foreach (TextChangeEventArgs change in textChanges)
                {
                    _lastChangeTime = DateTime.UtcNow;
                    var context = new TextChangeContext(_editorTree, change, _pendingChanges);

                    // No need to analyze changes if full parse is already pending
                    if (!_pendingChanges.FullParseRequired)
                    {
                        TextChangeAnalyzer.DetermineChangeType(context);
                    }

                    ProcessChange(context);
                }
            }
        }
All Usage Examples Of Microsoft.R.Editor.Tree.EditorTree::FireOnUpdatesPending