private static Task <Document> RefactorAsync(
            Document document,
            ArgumentListSyntax argumentList,
            SeparatedSyntaxListSelection <ArgumentSyntax> selection,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            var rewriter = new RemoveParameterNameRewriter(selection.ToImmutableArray());

            SyntaxNode newNode = rewriter
                                 .Visit(argumentList)
                                 .WithFormatterAnnotation();

            return(document.ReplaceNodeAsync(argumentList, newNode, cancellationToken));
        }
        private static async Task <Document> RefactorAsync(
            Document document,
            ArgumentListSyntax argumentList,
            SeparatedSyntaxListSelection <ArgumentSyntax> selection,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            var rewriter = new AddParameterNameRewriter(selection.ToImmutableArray(), semanticModel);

            SyntaxNode newNode = rewriter
                                 .Visit(argumentList)
                                 .WithFormatterAnnotation();

            return(await document.ReplaceNodeAsync(argumentList, newNode, cancellationToken).ConfigureAwait(false));
        }
        public static void ComputeRefactoring(
            RefactoringContext context,
            EnumDeclarationSyntax enumDeclaration,
            SeparatedSyntaxListSelection <EnumMemberDeclarationSyntax> selection,
            SemanticModel semanticModel)
        {
            INamedTypeSymbol enumSymbol = semanticModel.GetDeclaredSymbol(enumDeclaration, context.CancellationToken);

            if (enumSymbol?.IsEnumWithFlags() != true)
            {
                return;
            }

            object[] constantValues = selection
                                      .Select(f => semanticModel.GetDeclaredSymbol(f, context.CancellationToken))
                                      .Where(f => f.HasConstantValue)
                                      .Select(f => f.ConstantValue)
                                      .ToArray();

            object combinedValue = GetCombinedValue(constantValues, enumSymbol);

            if (combinedValue == null)
            {
                return;
            }

            if (IsValueDefined(enumSymbol, combinedValue))
            {
                return;
            }

            string name = NameGenerator.Default.EnsureUniqueMemberName(
                string.Concat(selection.Select(f => f.Identifier.ValueText)),
                enumSymbol);

            EnumMemberDeclarationSyntax newEnumMember = CreateEnumMember(name, selection.ToImmutableArray());

            int insertIndex = selection.LastIndex + 1;

            context.RegisterRefactoring(
                $"Generate enum member '{name}'",
                cancellationToken => RefactorAsync(context.Document, enumDeclaration, newEnumMember, insertIndex, cancellationToken),
                RefactoringIdentifiers.GenerateEnumMember);
        }