コード例 #1
0
        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 !);
        }