private void VisitCombinedClass(CombinedClass @class)
        {
            @class.ClassDeclarations.SelectMany(c => c.AttributeLists).Consume(VisitAttributeList);
            VisitXmlComment(@class.ClassDeclarations.SelectMany(c => c.GetLeadingTrivia()));

            var classType  = this.ConvertClassesToInterfaces ? "interface" : "class";
            var identifier = RewriteTypeName(@class.CSharpName);

            this.writer.WriteLine($"export {classType} {identifier} {{");
            this.writer.Indent();

            @class.ClassDeclarations.SelectMany(c => c.Members).Consume(VisitMemberDeclaration);

            this.writer.Unindent();
            this.writer.WriteLine("}");
        }
        private void VisitClassDeclaration(ClassDeclarationSyntax classDecl)
        {
            if (IgnoreByModifier(classDecl.Modifiers))
            {
                return;
            }

            if (this.mode == GeneratorMode.CollectClasses)
            {
                var className = classDecl.Identifier.Text;

                if (!this.collectedClasses.TryGetValue(className, out var combinedClass))
                {
                    combinedClass = new CombinedClass()
                    {
                        CSharpName        = className,
                        ClassDeclarations = new List <ClassDeclarationSyntax>(),
                    };
                    this.collectedClasses[className] = combinedClass;
                }

                combinedClass.ClassDeclarations.Add(classDecl);
            }
        }