in src/Json.Schema.ToDotNet/ClassGenerator.cs [1129:1193]
private StatementSyntax GenerateCollectionElementInitialization(
string destinationVariableName,
string sourceVariableName,
string elementInfoKey)
{
// The name of a variable used to loop over the elements of the collection
// held in sourceVariableName.
string collectionElementVariableName = _localVariableNameGenerator.GetNextCollectionElementVariableName();
// The name of the variable that holds a collection that will contain
// copies of the elements in the source collection.
string innerDestinationVariableName = _localVariableNameGenerator.GetNextDestinationVariableName();
// Find out out kind of code must be generated to initialize the elements of
// the collection.
string sourceElementInfoKey = PropertyInfoDictionary.MakeElementKeyName(elementInfoKey);
InitializationKind elementInitializationKind = PropInfoDictionary[sourceElementInfoKey].InitializationKind;
TypeSyntax sourceElementType = PropInfoDictionary[elementInfoKey].Type;
return SyntaxFactory.IfStatement(
SyntaxHelper.IsNull(SyntaxFactory.IdentifierName(sourceVariableName)),
SyntaxFactory.Block(
SyntaxFactory.ExpressionStatement(
SyntaxFactory.InvocationExpression(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(destinationVariableName),
SyntaxFactory.IdentifierName(AddMethodName)),
SyntaxHelper.ArgumentList(
SyntaxFactory.LiteralExpression(
SyntaxKind.NullLiteralExpression))))),
SyntaxFactory.ElseClause(
SyntaxFactory.Block(
SyntaxFactory.LocalDeclarationStatement(
SyntaxFactory.VariableDeclaration(
SyntaxHelper.Var(),
SyntaxFactory.SingletonSeparatedList(
SyntaxFactory.VariableDeclarator(
SyntaxFactory.Identifier(innerDestinationVariableName),
default(BracketedArgumentListSyntax),
SyntaxFactory.EqualsValueClause(
SyntaxFactory.ObjectCreationExpression(
PropInfoDictionary.GetConcreteListType(elementInfoKey),
SyntaxHelper.ArgumentList(),
default(InitializerExpressionSyntax))))))),
SyntaxFactory.ForEachStatement(
SyntaxHelper.Var(),
collectionElementVariableName,
SyntaxFactory.IdentifierName(sourceVariableName),
SyntaxFactory.Block(
GenerateElementInitialization(
sourceElementInfoKey,
innerDestinationVariableName,
collectionElementVariableName))),
SyntaxFactory.ExpressionStatement(
SyntaxFactory.InvocationExpression(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(destinationVariableName),
SyntaxFactory.IdentifierName(AddMethodName)),
SyntaxHelper.ArgumentList(
SyntaxFactory.IdentifierName(innerDestinationVariableName)))))));
}