Ejemplo n.º 1
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());
        }
Ejemplo n.º 2
0
        private ClassDeclarationSyntax GeneratePartialClassCompletion(GenerationContext context)
        {
            ClassGenerator classGen = new ClassGenerator(Declaration);

            var p = classGen.AddConstructor()
                    .AddRequiredParameter(this, BuilderClassName, "source")
                    .AddPropertyAssignmentBlock(AssignmentTarget.SourceClass);

            if (BaseClass != null)
            {
                p.PassToBaseConstructor();
            }

            p = classGen.AddConstructor()
                .AddRequiredParameter(this, Name, "source")
                .AddPropertyAssignmentBlock(AssignmentTarget.SourceToSource);

            if (BaseClass != null)
            {
                p.PassToBaseConstructor();
            }

            classGen.AddAttribute(
                Attribute(IdentifierName("Builder")).AddArgumentListArguments(
                    AttributeArgument(
                        TypeOfExpression(IdentifierName(BuilderClassName)))));

            classGen.AddMembers(GenerateMutateMethod());

            foreach (SourceInterface i in Interfaces)
            {
                classGen.ImplementInterface(i);
            }

            GenerateICausesInterfaceImplementation(classGen, context);
            return(classGen.Generate());
        }