public void VisitRoot(IContainerTypeTreeVisitor visitor)
        {
            var context = new ContainerTypeTreePath()
            {
                Namespace = this.TypePath.Namespace,
                TypePath  = new Stack <string>(new[] { this.TypeName })
            };

            visitor.VisitContainer(context, this);

            Visit(context, visitor);
        }
        public void Visit(ContainerTypeTreePath path, IContainerTypeTreeVisitor visitor)
        {
            path.TypePath.Push(TypeName);

            visitor.VisitNestedContainer(path, this);

            foreach (var t in NestedContainers)
            {
                t.Visit(path, visitor);
            }

            path.TypePath.Pop();
        }