예제 #1
0
        private CSharpSyntaxGeneratorResult GenerateDataClass(
            DataTypeDescriptor descriptor,
            CSharpSyntaxGeneratorSettings settings)
        {
            if (settings.EntityRecords)
            {
                RecordDeclarationSyntax recordDeclarationSyntax =
                    RecordDeclaration(Token(SyntaxKind.RecordKeyword), descriptor.RuntimeType.Name)
                    .AddModifiers(
                        Token(SyntaxKind.PublicKeyword),
                        Token(SyntaxKind.PartialKeyword))
                    .AddGeneratedAttribute()
                    .AddSummary(descriptor.Documentation)
                    .AddImplements(descriptor.Implements)
                    .WithOpenBraceToken(Token(SyntaxKind.OpenBraceToken));

                // Adds the constructor
                ConstructorDeclarationSyntax constructor =
                    ConstructorDeclaration(descriptor.RuntimeType.Name)
                    .AddModifiers(Token(SyntaxKind.PublicKeyword));

                constructor = constructor.AddTypeParameter();

                ForEachProperty(
                    descriptor,
                    p => constructor = constructor.AddStateParameter(p));

                recordDeclarationSyntax = recordDeclarationSyntax.AddMembers(constructor);

                // Adds the property
                recordDeclarationSyntax = recordDeclarationSyntax.AddTypeProperty();

                ForEachProperty(
                    descriptor,
                    p => recordDeclarationSyntax = recordDeclarationSyntax.AddStateProperty(p));

                recordDeclarationSyntax = recordDeclarationSyntax.WithCloseBraceToken(
                    Token(SyntaxKind.CloseBraceToken));

                return(new(
                           descriptor.RuntimeType.Name,
                           State,
                           descriptor.RuntimeType.NamespaceWithoutGlobal,
                           recordDeclarationSyntax));
            }
            else
            {
                ClassDeclarationSyntax classDeclaration =
                    ClassDeclaration(descriptor.RuntimeType.Name)
                    .AddModifiers(
                        Token(SyntaxKind.PublicKeyword),
                        Token(SyntaxKind.PartialKeyword))
                    .AddGeneratedAttribute()
                    .AddSummary(descriptor.Documentation)
                    .AddImplements(descriptor.Implements);

                // Adds the constructor
                ConstructorDeclarationSyntax constructor =
                    ConstructorDeclaration(descriptor.RuntimeType.Name)
                    .AddModifiers(Token(SyntaxKind.PublicKeyword));

                constructor = constructor.AddTypeParameter();

                ForEachProperty(
                    descriptor,
                    p => constructor = constructor.AddStateParameter(p));

                classDeclaration = classDeclaration.AddMembers(constructor);

                // Adds the property
                classDeclaration = classDeclaration.AddTypeProperty();

                ForEachProperty(
                    descriptor,
                    p => classDeclaration = classDeclaration.AddStateProperty(p));

                return(new(
                           descriptor.RuntimeType.Name,
                           State,
                           descriptor.RuntimeType.NamespaceWithoutGlobal,
                           classDeclaration));
            }
        }