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(); } }
private void GenerateBuilderConstructor(ClassGenerator @class) { var ctor = @class .AddConstructor(); var p = ctor .AddOptionalParameter(this, "source") .AddPropertyAssignmentBlock(AssignmentTarget.BuilderClass); if (BaseClass != null) { p.PassToBaseConstructor(); } }
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()); }