Пример #1
0
        private void GenerateAdditionalConstructors(ClassGenerator @class)
        {
            List <ParameterInfo> parameters = new List <ParameterInfo>();

            var ctor = @class
                       .AddConstructor();

            if (BaseClass != null)
            {
                BaseClass.GetBuilderConstructorParameters(parameters);

                foreach (ParameterInfo p in parameters)
                {
                    ctor.AddOptionalParameter(p.Type, p.Name).PassToBaseConstructor();
                }
            }

            ParameterInfo[] additionalParams = GetAdditionalBuilderConstructorParameters().ToArray();

            foreach (ParameterInfo p in additionalParams)
            {
                ctor.AddOptionalParameter(p.Type, p.Name).AddPropertyAssignmentBlock(AssignmentTarget.BuilderClass);
            }

            if (parameters.Any() || additionalParams.Any())
            {
                // Default constructor
                @class.AddConstructor();
            }
        }
Пример #2
0
        private void GenerateBuilderConstructor(ClassGenerator @class)
        {
            var ctor = @class
                       .AddConstructor();

            var p = ctor
                    .AddOptionalParameter(this, "source")
                    .AddPropertyAssignmentBlock(AssignmentTarget.BuilderClass);

            if (BaseClass != null)
            {
                p.PassToBaseConstructor();
            }
        }
Пример #3
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());
        }