public override void EndNode(AstNode node)
 {
     System.Diagnostics.Debug.Assert(currentList != null);
     foreach (var removable in node.Children.Where(n => n is CSharpTokenNode))
     {
         removable.Remove();
     }
     foreach (var child in currentList)
     {
         System.Diagnostics.Debug.Assert(child.Parent == null || node == child.Parent);
         child.Remove();
         node.AddChildWithExistingRole(child);
     }
     currentList = nodes.Pop();
     base.EndNode(node);
 }