in src/Json.Schema.ToDotNet/ClassGenerator.cs [635:688]
private ConstructorDeclarationSyntax GenerateCopyConstructor()
{
// Generate the argument list that will be passed from the copy ctor to the
// Init method.
ExpressionSyntax[] initArguments = PropInfoDictionary.GetPropertyNames()
.Select(name =>
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(OtherParameterName),
SyntaxFactory.IdentifierName(name)))
.ToArray();
return SyntaxFactory.ConstructorDeclaration(SuffixedTypeName)
.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
.AddParameterListParameters(
SyntaxFactory.Parameter(SyntaxFactory.Identifier(OtherParameterName))
.WithType(SyntaxFactory.ParseTypeName(SuffixedTypeName)))
.AddBodyStatements(
SyntaxFactory.IfStatement(
SyntaxHelper.IsNull(OtherParameterName),
SyntaxFactory.Block(
SyntaxFactory.ThrowStatement(
SyntaxFactory.ObjectCreationExpression(
SyntaxFactory.ParseTypeName("ArgumentNullException"))
.AddArgumentListArguments(
SyntaxFactory.Argument(
SyntaxFactory.InvocationExpression(
SyntaxFactory.IdentifierName("nameof"),
SyntaxHelper.ArgumentList(
SyntaxFactory.IdentifierName(OtherParameterName)))))))),
SyntaxFactory.ExpressionStatement(
SyntaxFactory.InvocationExpression(
SyntaxFactory.IdentifierName(InitMethodName),
SyntaxHelper.ArgumentList(initArguments))))
.WithLeadingTrivia(
SyntaxHelper.MakeDocComment(
string.Format(
CultureInfo.CurrentCulture,
Resources.CopyCtorSummary,
SuffixedTypeName),
returns: null,
paramDescriptionDictionary: new Dictionary<string, string>
{
[OtherParameterName] = Resources.CopyCtorOtherParam
},
exceptionDictionary: new Dictionary<string, string>
{
["ArgumentNullException"] =
string.Format(
CultureInfo.CurrentCulture,
Resources.CopyCtorOtherNullException,
OtherParameterName)
}));
}