private static ClassDeclaration GenerateOutputClass(RecordDeclaration record, MethodDeclaration toStringMethod, MethodDeclaration equalsMethod, MethodDeclaration objectEqualsMethod, ClassDeclaration builderClass) { var constructorParams = record.RecordProperties .Select(p => new Parameter(p.Name, p.Type)) .ToArray(); var constructorAssignments = record.RecordProperties .Select(p => new AssignmentStatement($"this.{p.Name}", p.Name)) .ToArray(); var output = new ClassDeclaration( record.Name, new[] { new Constructor(record.Name, Visibility.Public, constructorParams, constructorAssignments) }, Visibility.Public, inheritsImplements: new [] { "" }, isPartial: true, contents: new IWriteableCode[] { toStringMethod, equalsMethod, objectEqualsMethod, builderClass }); return(output); }