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()); }
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()); }