Exemple #1
0
        public static Task <Document> RefactorAsync(
            Document document,
            RecordDeclarationSyntax recordDeclaration,
            IMethodSymbol[] constructorSymbols,
            SemanticModel semanticModel,
            CancellationToken cancellationToken = default)
        {
            SyntaxList <MemberDeclarationSyntax> members = recordDeclaration.Members;

            string recordName = recordDeclaration.Identifier.ValueText;

            bool isSealedClass = recordDeclaration.Modifiers.Contains(SyntaxKind.SealedKeyword);

            int insertIndex = MemberDeclarationInserter.Default.GetInsertIndex(members, SyntaxKind.ConstructorDeclaration);

            int position = (insertIndex == 0)
                ? recordDeclaration.OpenBraceToken.FullSpan.End
                : members[insertIndex - 1].FullSpan.End;

            IEnumerable <ConstructorDeclarationSyntax> constructors = constructorSymbols
                                                                      .Select(symbol => CreateConstructor(symbol, recordName, isSealedClass, semanticModel, position));

            RecordDeclarationSyntax newRecordDeclaration = recordDeclaration
                                                           .WithMembers(members.InsertRange(insertIndex, constructors));

            return(document.ReplaceNodeAsync(recordDeclaration, newRecordDeclaration, cancellationToken));
        }
        public static SourceText GeneratePrintMembersText(
            RecordDeclarationSyntax recordDeclaration,
            INamedTypeSymbol recordSymbol,
            Dictionary <SymbolClassification, List <ISymbol> > groups)
        {
            MemberDeclarationSyntax printMembersMethod = SyntaxFactory.MethodDeclaration(
                attributeLists: s_emptyAttributeList,
                modifiers: GetPrintMembersModifiers(recordSymbol),
                returnType: SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.BoolKeyword)),
                explicitInterfaceSpecifier: null,
                identifier: s_printMembersIdentifier,
                typeParameterList: null,
                parameterList: SyntaxFactory.ParameterList(
                    SyntaxFactory.SeparatedList <ParameterSyntax>(
                        new[] { SyntaxFactory.Parameter(s_emptyAttributeList, s_emptyTokenList, s_stringBuilderType, s_builderIdentifier, null) }
                        )
                    ),
                constraintClauses: s_emptyConstraintList,
                body: GenerateBody(recordDeclaration, recordSymbol, groups),
                expressionBody: null
                );

            string namespaceFullyQualifiedName = GetFullyQualifiedNameOfNamespace(recordSymbol.ContainingNamespace);

            recordDeclaration = recordDeclaration.WithMembers(new SyntaxList <MemberDeclarationSyntax>(printMembersMethod));

            if (namespaceFullyQualifiedName.Length == 0)
            {
                return(recordDeclaration.NormalizeWhitespace().GetText(Encoding.UTF8));
            }

            NamespaceDeclarationSyntax namespaceDeclaration = SyntaxFactory.NamespaceDeclaration(SyntaxFactory.IdentifierName(namespaceFullyQualifiedName));

            return(namespaceDeclaration.WithMembers(new SyntaxList <MemberDeclarationSyntax>(recordDeclaration)).NormalizeWhitespace().GetText(Encoding.UTF8));
        }
Exemple #3
0
        /// <summary>
        /// Creates a new <see cref="RecordDeclarationSyntax"/> with the specified member inserted.
        /// </summary>
        /// <param name="recordDeclaration"></param>
        /// <param name="member"></param>
        public RecordDeclarationSyntax Insert(RecordDeclarationSyntax recordDeclaration, MemberDeclarationSyntax member)
        {
            if (recordDeclaration == null)
            {
                throw new ArgumentNullException(nameof(recordDeclaration));
            }

            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            return(recordDeclaration.WithMembers(Insert(recordDeclaration.Members, member)));
        }
Exemple #4
0
        private RecordDeclarationSyntax SortRecordNode(RecordDeclarationSyntax recordDeclaration)
        {
            var membersOfRecord = recordDeclaration.Members.ToList();
            var nodeData        = membersOfRecord.ToDictionary(x => x, x => new CSharpSyntaxNodeData(x));

            IComparer <MemberDeclarationSyntax> comparer = new NodeSorter(nodeData, sortingConfiguration);

            membersOfRecord.Sort(comparer);

            RecordDeclarationSyntax recordDeclarationNodeWithoutNodes = recordDeclaration.RemoveNodes(membersOfRecord, SyntaxRemoveOptions.KeepNoTrivia);
            RecordDeclarationSyntax finalRecordDeclarationNode        = recordDeclarationNodeWithoutNodes.WithMembers(new SyntaxList <MemberDeclarationSyntax>(membersOfRecord));

            return(finalRecordDeclarationNode);
        }
        public static RecordDeclarationSyntax RemoveMember(RecordDeclarationSyntax recordDeclaration, MemberDeclarationSyntax member)
        {
            if (recordDeclaration == null)
            {
                throw new ArgumentNullException(nameof(recordDeclaration));
            }

            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            int index = recordDeclaration.Members.IndexOf(member);

            MemberDeclarationSyntax newMember = RemoveSingleLineDocumentationComment(member);

            recordDeclaration = recordDeclaration.WithMembers(recordDeclaration.Members.ReplaceAt(index, newMember));

            return(RemoveNode(recordDeclaration, f => f.Members, index, GetRemoveOptions(newMember)));
        }