Exemple #1
0
        private void GenerateIBuildsInterfaceImplementation(ClassGenerator @class)
        {
            @class.AddBaseType(GenericName("IBuilds").AddTypeArgumentListArguments(NameSyntax));

            MethodDeclarationSyntax buildMethod = MethodDeclaration(returnType: NameSyntax, Identifier("Build"))
                                                  .AddModifiers(Token(SyntaxKind.PublicKeyword))
                                                  .AddBodyStatements(
                ReturnStatement(
                    ObjectCreationExpression(NameSyntax)
                    .AddArgumentListArguments(Argument(ThisExpression()))));

            ConversionOperatorDeclarationSyntax implicitCastOperator =
                ConversionOperatorDeclaration(Token(SyntaxKind.ImplicitKeyword), NameSyntax)
                .AddModifiers(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.StaticKeyword))
                .AddParameterListParameters(
                    Parameter(Identifier("builder"))
                    .WithType(IdentifierName(BuilderClassName)))
                .AddBodyStatements(
                    ReturnStatement(
                        InvocationExpression(
                            MemberAccessExpression(
                                SyntaxKind.SimpleMemberAccessExpression,
                                IdentifierName("builder"),
                                IdentifierName("Build")))));

            if (BaseClass != null)
            {
                buildMethod = buildMethod.AddModifiers(Token(SyntaxKind.NewKeyword));
            }

            @class.AddMembers(buildMethod, implicitCastOperator);
        }
Exemple #2
0
        private ClassDeclarationSyntax GenerateBuilderClass(GenerationContext context)
        {
            ClassGenerator @class = new ClassGenerator(Declaration, BuilderClassName);

            @class.AddMembers(
                Properties.SelectMany(p => PropertyRule
                                      .GetRule(p)
                                      .GenerateBuilderPropertyDeclarations(p))
                .ToArray());

            if (BaseClass != null)
            {
                @class.AddBaseType(IdentifierName(BaseClass.BuilderClassName));
            }

            GenerateIBuildsInterfaceImplementation(@class);

            GenerateBuilderConstructor(@class);
            GenerateAdditionalConstructors(@class);

            return(@class.Generate());
        }