private StatementSyntax GenerateDictionaryInitializationWithClonedElements()

in src/Json.Schema.ToDotNet/ClassGenerator.cs [1014:1061]


        private StatementSyntax GenerateDictionaryInitializationWithClonedElements(
            string propertyName,
            TypeSyntax elementType)
        {
            string argName = propertyName.ToCamelCase();
            string valueVariableName = _localVariableNameGenerator.GetNextCollectionElementVariableName();
            TypeSyntax dictionaryType = PropInfoDictionary.GetConcreteDictionaryType(propertyName);

            return SyntaxFactory.IfStatement(
                // if (foo != null)
                SyntaxHelper.IsNotNull(argName),
                SyntaxFactory.Block(
                    SyntaxFactory.ExpressionStatement(
                        // Foo = new Dictionary<string, D>();
                        SyntaxFactory.AssignmentExpression(
                            SyntaxKind.SimpleAssignmentExpression,
                            SyntaxFactory.IdentifierName(propertyName),
                            SyntaxFactory.ObjectCreationExpression(
                                dictionaryType,
                                SyntaxFactory.ArgumentList(),
                                default(InitializerExpressionSyntax)))),
                    
                    // foreach (var value_0 in foo)
                    SyntaxFactory.ForEachStatement(
                        SyntaxHelper.Var(),
                        valueVariableName,
                        SyntaxFactory.IdentifierName(argName),
                        SyntaxFactory.Block(
                            SyntaxFactory.ExpressionStatement(
                                SyntaxFactory.InvocationExpression(
                                    SyntaxFactory.MemberAccessExpression(
                                        SyntaxKind.SimpleMemberAccessExpression,
                                        SyntaxFactory.IdentifierName(propertyName),
                                        SyntaxFactory.IdentifierName(AddMethodName)),
                                    SyntaxHelper.ArgumentList(
                                        SyntaxFactory.MemberAccessExpression(
                                            SyntaxKind.SimpleMemberAccessExpression,
                                            SyntaxFactory.IdentifierName(valueVariableName),
                                            SyntaxFactory.IdentifierName(KeyPropertyName)),
                                        SyntaxFactory.ObjectCreationExpression(
                                            elementType,
                                            SyntaxHelper.ArgumentList(
                                                SyntaxFactory.MemberAccessExpression(
                                                    SyntaxKind.SimpleMemberAccessExpression,
                                                    SyntaxFactory.IdentifierName(valueVariableName),
                                                    SyntaxFactory.IdentifierName(ValuePropertyName))),
                                            default(InitializerExpressionSyntax)))))))));
        }