internal void FireOnNodesRemoved(IReadOnlyCollection<IAstNode> nodes) {
if (_ownerThread != Thread.CurrentThread.ManagedThreadId) {
Debug.Fail(_threadContextInvalidMessage);
return;
}
try {
// Don't bother if list is empty
if (nodes.Count > 0) {
NodesRemoved?.Invoke(this, new TreeNodesRemovedEventArgs(nodes));
}
} catch (Exception ex) {
Debug.Assert(false, Invariant($"Exception thrown in a tree.NodesRemoved event handler: {ex.Message}"));
}
}