private ImmutableArray <SingleTypeDeclaration> VisitTemplateChildren(TemplateDeclarationSyntax node)
        {
            // No members, we're good!
            if (node.Members.Count == 0)
            {
                return(ImmutableArray <SingleTypeDeclaration> .Empty);
            }

            // Visit each member and add it to children afterwards
            var children = ArrayBuilder <SingleTypeDeclaration> .GetInstance();

            foreach (var member in node.Members)
            {
                if (Visit(member) is SingleTypeDeclaration typeDecl)
                {
                    children.Add(typeDecl);
                }
                else
                {
                    throw new NotImplementedException("Non-types can't be members of Templates.");
                }
            }

            return(children.ToImmutableAndFree());
        }
 public override SingleNamespaceOrTypeDeclaration VisitTemplateDeclaration(TemplateDeclarationSyntax node)
 {
     return(new TemplateDeclaration(
                name: node.Name.GetUnqualifiedName().Identifier.ValueText,
                syntaxReference: _syntaxTree.GetReference(node),
                nameLocation: new SourceLocation(node.Name),
                children: VisitTemplateChildren(node),
                diagnostics: DiagnosticBag.GetInstance().ToReadOnlyAndFree()));
 }