public List <MutationNode> CreateMutationNodeList()
        {
            var result = new List <MutationNode>();
            //var lineNumbers = from m in _majorLogItems group m.LineNumber by m.LineNumber into grp select grp.Key;
            var lineNumbers = _majorLogItems.GroupBy(m => m.LineNumber).Select(grp => grp.Key).OrderBy(l => l);

            var index = 1;

            foreach (var lineNumber in lineNumbers)
            {
                var mutations    = _majorLogItems.Where(m => m.LineNumber == lineNumber);
                var mutationNode = new MutationNode
                {
                    Id           = index++,
                    LineNumber   = lineNumber,
                    MutationList = mutations.Select(m => new MutationRecord
                    {
                        Id         = m.Index,
                        MutateFrom = m.MutateFrom,
                        MutateTo   = m.MutateTo,
                        Operator   = m.MutationOperator
                    }).ToList()
                };
                result.Add(mutationNode);
            }

            return(result);
        }
        public void RemoveFromParentIfEmpty(MutationNode node)
        {
            var children = node.Children.ToList();

            while (children.OfType <TypeNamespaceNode>().Any())
            {
                TypeNamespaceNode typeNamespaceNode = node.Children.OfType <TypeNamespaceNode>().First();
                RemoveFromParentIfEmpty(typeNamespaceNode);
                children.Remove(typeNamespaceNode);
            }
            while (children.OfType <TypeNode>().Any())
            {
                TypeNode typeNamespaceNode = children.OfType <TypeNode>().First();
                RemoveFromParentIfEmpty(typeNamespaceNode);
                children.Remove(typeNamespaceNode);
            }
            if (!node.Children.Any())
            {
                node.Parent.Children.Remove(node);
                node.Parent = null;
            }
        }
 public void RemoveFromParentIfEmpty(MutationNode node)
 {
     var children = node.Children.ToList();
     while (children.OfType<TypeNamespaceNode>().Any())
     {
         TypeNamespaceNode typeNamespaceNode = node.Children.OfType<TypeNamespaceNode>().First();
         RemoveFromParentIfEmpty(typeNamespaceNode);
         children.Remove(typeNamespaceNode);
     }
     while (children.OfType<TypeNode>().Any())
     {
         TypeNode typeNamespaceNode = node.Children.OfType<TypeNode>().First();
         RemoveFromParentIfEmpty(typeNamespaceNode);
         children.Remove(typeNamespaceNode);
     }
     if (!node.Children.Any())
     {
         node.Parent.Children.Remove(node);
         node.Parent = null;
     }
 }