Exemple #1
0
 private static ClassDeclarationSyntax GenerateAllTableList(IReadOnlyList <TableModel> tables, string tablePrefix)
 {
     return(SyntaxFactory.ClassDeclaration(AllTablesClassName)
            .WithModifiers(SyntaxHelpers.Modifiers(SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword))
            .AddMembers(GenerateMethods(tables, tablePrefix))
            .NormalizeWhitespace());
 }
Exemple #2
0
        private static MemberDeclarationSyntax[] GenerateMethods(IReadOnlyList <TableModel> tables, string tablePrefix)
        {
            var result = new List <MemberDeclarationSyntax>(tables.Count * 2 + 2);

            var identifierAliasType = SyntaxFactory.IdentifierName(nameof(Alias));

            var arrayItems = tables.Select(t => SyntaxFactory.IdentifierName(GetMethodName(t, tablePrefix)).Invoke(identifierAliasType.MemberAccess(nameof(Alias.Empty))));
            var arrayType  = SyntaxFactory.ArrayType(SyntaxFactory.IdentifierName(nameof(TableBase)),
                                                     new SyntaxList <ArrayRankSpecifierSyntax>(new[]
            {
                SyntaxFactory.ArrayRankSpecifier(SyntaxFactory.Token(SyntaxKind.OpenBracketToken),
                                                 new SeparatedSyntaxList <ExpressionSyntax>(),
                                                 SyntaxFactory.Token(SyntaxKind.CloseBracketToken))
            }));
            var array = SyntaxFactory.ArrayCreationExpression(
                arrayType,
                SyntaxFactory.InitializerExpression(SyntaxKind.ArrayInitializerExpression,
                                                    new SeparatedSyntaxList <ExpressionSyntax>().AddRange(arrayItems))
                );

            result.Add(
                SyntaxFactory.MethodDeclaration(arrayType, "BuildAllTableList")
                .WithModifiers(SyntaxHelpers.Modifiers(SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword))
                .WithExpressionBody(SyntaxFactory.ArrowExpressionClause(
                                        array
                                        ))
                .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)));

            foreach (var t in tables)
            {
                var aliasParamName = "alias";

                result.Add(SyntaxFactory.MethodDeclaration(SyntaxFactory.ParseTypeName(t.Name), GetMethodName(t, tablePrefix))
                           .WithModifiers(SyntaxHelpers.Modifiers(SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword))
                           .AddParameterListParameters(SyntaxHelpers.FuncParameter(aliasParamName, nameof(Alias)))
                           .WithExpressionBody(SyntaxFactory.ArrowExpressionClause(
                                                   SyntaxFactory.ObjectCreationExpression(SyntaxFactory.ParseTypeName(t.Name),
                                                                                          SyntaxHelpers.ArgumentList(SyntaxFactory.IdentifierName(aliasParamName)),
                                                                                          null)))
                           .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)));

                result.Add(SyntaxFactory.MethodDeclaration(SyntaxFactory.ParseTypeName(t.Name), GetMethodName(t, tablePrefix))
                           .WithModifiers(SyntaxHelpers.Modifiers(SyntaxKind.PublicKeyword, SyntaxKind.StaticKeyword))
                           .WithExpressionBody(SyntaxFactory.ArrowExpressionClause(
                                                   SyntaxFactory.ObjectCreationExpression(SyntaxFactory.ParseTypeName(t.Name),
                                                                                          SyntaxHelpers.ArgumentList(identifierAliasType.MemberAccess(nameof(Alias.Auto))),
                                                                                          null)))
                           .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
            }

            return(result.ToArray());