public ClassDeclarationSyntax GenerateClassDeclaration(RecordDeclarationSyntax record, bool initFromConstructor) { var leadingClassTrivia = record.GetLeadingTrivia(); var trailingClassTrivia = record.GetTrailingTrivia(); var classSyntax = ClassDeclaration(record.Identifier).WithModifiers(record.Modifiers); var parameters = record.ParameterList?.Parameters ?? new SeparatedSyntaxList <ParameterSyntax>(); foreach (ParameterSyntax parameter in parameters) { if (parameter.Type != null) { classSyntax = classSyntax.AddMembers( PropertyDeclaration(parameter.Type, parameter.Identifier) .AddAccessorListAccessors( AccessorDeclaration(SyntaxKind.GetAccessorDeclaration) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken)), AccessorDeclaration(SyntaxKind.SetAccessorDeclaration) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken))) .AddModifiers(Token(SyntaxKind.PublicKeyword)) ); } } if (initFromConstructor) { var constructorDeclaration = ConstructorDeclaration(record.Identifier).AddModifiers(Token(SyntaxKind.PublicKeyword)); constructorDeclaration = constructorDeclaration.AddParameterListParameters(GenerateConstructorParameters(parameters).ToArray()); var constructorDeclarationSyntax = constructorDeclaration.WithBody(Block(GenerateAssignmentStatements(parameters))); classSyntax = classSyntax.AddMembers(constructorDeclarationSyntax); } var result = (ClassDeclarationSyntax)classSyntax.NormalizeWhitespacesSingleLineProperties().WithLeadingTrivia(leadingClassTrivia).WithTrailingTrivia(trailingClassTrivia); return(result !); }