private static void ComputeRefactoring( RefactoringContext context, MemberDeclarationSortMode sortMode, string title, SelectedMemberDeclarationCollection selectedMembers, ImmutableArray <MemberDeclarationSyntax> selectedMemberArray) { if (!MemberDeclarationComparer.IsSorted(selectedMemberArray, sortMode)) { context.RegisterRefactoring( title, cancellationToken => RefactorAsync(context.Document, selectedMembers, sortMode, cancellationToken)); } }
private static async Task <Document> RefactorAsync( Document document, SelectedMemberDeclarationCollection selectedMembers, MemberDeclarationSortMode sortMode, CancellationToken cancellationToken) { var comparer = new MemberDeclarationComparer(sortMode); MemberDeclarationSyntax containingMember = selectedMembers.ContainingMember; SyntaxList <MemberDeclarationSyntax> members = containingMember.GetMembers(); SyntaxList <MemberDeclarationSyntax> newMembers = members .Take(selectedMembers.FirstIndex) .Concat(selectedMembers.OrderBy(f => f, comparer)) .Concat(members.Skip(selectedMembers.LastIndex + 1)) .ToSyntaxList(); MemberDeclarationSyntax newNode = containingMember.SetMembers(newMembers); return(await document.ReplaceNodeAsync(containingMember, newNode, cancellationToken).ConfigureAwait(false)); }
private static void ComputeRefactoring(RefactoringContext context, SelectedMemberDeclarationCollection selectedMembers) { if (selectedMembers.IsMultiple) { ImmutableArray <MemberDeclarationSyntax> selectedMemberArray = selectedMembers.ToImmutableArray(); SyntaxKind kind = GetSingleKindOrDefault(selectedMemberArray); if (kind != SyntaxKind.None) { if (MemberDeclarationComparer.CanBeSortedAlphabetically(kind)) { ComputeRefactoring( context, MemberDeclarationSortMode.ByKindThenByName, "Sort members by name", selectedMembers, selectedMemberArray); } } else { ComputeRefactoring( context, MemberDeclarationSortMode.ByKind, "Sort members by kind", selectedMembers, selectedMemberArray); ComputeRefactoring( context, MemberDeclarationSortMode.ByKindThenByName, "Sort members by kind then by name", selectedMembers, selectedMemberArray); } } }
public static void ComputeRefactoring(RefactoringContext context, InterfaceDeclarationSyntax interfaceDeclaration) { ComputeRefactoring(context, SelectedMemberDeclarationCollection.Create(interfaceDeclaration, context.Span)); }