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