public override BaseTypeDeclarationSyntax GenerateTypeDeclaration()

in src/Json.Schema.ToDotNet/ClassGenerator.cs [88:149]


        public override BaseTypeDeclarationSyntax GenerateTypeDeclaration()
        {
            SyntaxKind sealedOrPartial = _sealClasses
                ? SyntaxKind.SealedKeyword
                : SyntaxKind.PartialKeyword;

            var classDeclaration = SyntaxFactory.ClassDeclaration(SuffixedTypeName)
                .AddAttributeLists(new AttributeListSyntax[]
                    {
                        SyntaxFactory.AttributeList(
                            SyntaxFactory.SingletonSeparatedList(
                                SyntaxFactory.Attribute(
                                    SyntaxFactory.IdentifierName(DataContractAttributeName))))
                    })
                .AddModifiers(
                    SyntaxFactory.Token(SyntaxKind.PublicKeyword),
                    SyntaxFactory.Token(sealedOrPartial));

            var baseTypes = new List<BaseTypeSyntax>();

            BaseTypeHint baseTypeHint = HintDictionary?.GetHint<BaseTypeHint>(TypeName.ToCamelCase());
            if (baseTypeHint?.BaseTypeNames != null)
            {
                baseTypes.AddRange(
                    baseTypeHint.BaseTypeNames.Select(
                        btn => SyntaxFactory.SimpleBaseType(
                            SyntaxFactory.ParseTypeName(btn))));
            }

            // If this class implements an interface, add the interface to
            // the base type list.
            if (_baseInterfaceName != null)
            {
                SimpleBaseTypeSyntax interfaceType =
                    SyntaxFactory.SimpleBaseType(
                        SyntaxFactory.ParseTypeName(_baseInterfaceName));

                baseTypes.Add(interfaceType);
            }

            // If we were asked to generate cloning code, add the necessary interface.
            if (_generateCloningCode)
            {
                SimpleBaseTypeSyntax interfaceType =
                    SyntaxFactory.SimpleBaseType(
                        SyntaxFactory.ParseTypeName(_syntaxInterfaceName));

                baseTypes.Add(interfaceType);
            }

            AddUsing("System");
            AddUsing("System.Runtime.Serialization");   // For DataContractAttribute;

            if (baseTypes.Count > 0)
            {
                SeparatedSyntaxList<BaseTypeSyntax> separatedBaseList = SyntaxFactory.SeparatedList(baseTypes);
                BaseListSyntax baseList = SyntaxFactory.BaseList(separatedBaseList);
                classDeclaration = classDeclaration.WithBaseList(baseList);
            }

            return classDeclaration;
        }