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())); }