public override async Task <Solution> GetModifiedSolutionAsync(
            Document document,
            TextSpan textSpan,
            MoveTypeOperationKind operationKind,
            CancellationToken cancellationToken
            )
        {
            var state = await CreateStateAsync(document, textSpan, cancellationToken)
                        .ConfigureAwait(false);

            if (state == null)
            {
                return(document.Project.Solution);
            }

            var suggestedFileNames = GetSuggestedFileNames(
                state.TypeNode,
                IsNestedType(state.TypeNode),
                state.TypeName,
                state.SemanticDocument.Document.Name,
                state.SemanticDocument.SemanticModel,
                cancellationToken
                );

            var editor = Editor.GetEditor(
                operationKind,
                (TService)this,
                state,
                suggestedFileNames.FirstOrDefault(),
                cancellationToken
                );
            var modifiedSolution = await editor.GetModifiedSolutionAsync().ConfigureAwait(false);

            return(modifiedSolution ?? document.Project.Solution);
        }
 public static Editor GetEditor(
     MoveTypeOperationKind operationKind,
     TService service,
     State state,
     string fileName,
     CancellationToken cancellationToken
     ) =>
 operationKind switch
 {
 public MoveTypeCodeAction(
     TService service,
     State state,
     MoveTypeOperationKind operationKind,
     string fileName)
 {
     _state         = state;
     _service       = service;
     _operationKind = operationKind;
     _fileName      = fileName;
     _title         = CreateDisplayText();
 }
            public static Editor GetEditor(MoveTypeOperationKind operationKind, TService service, State state, string fileName, CancellationToken cancellationToken)
            {
                switch (operationKind)
                {
                case MoveTypeOperationKind.MoveType:
                    return(new MoveTypeEditor(service, state, fileName, cancellationToken));

                case MoveTypeOperationKind.RenameType:
                    return(new RenameTypeEditor(service, state, fileName, cancellationToken));

                case MoveTypeOperationKind.RenameFile:
                    return(new RenameFileEditor(service, state, fileName, cancellationToken));

                case MoveTypeOperationKind.MoveTypeNamespaceScope:
                    return(new MoveTypeNamespaceScopeEditor(service, state, fileName, cancellationToken));

                default:
                    throw ExceptionUtilities.UnexpectedValue(operationKind);
                }
            }
 private CodeAction GetCodeAction(State state, string fileName, MoveTypeOperationKind operationKind) =>
 new MoveTypeCodeAction((TService)this, state, operationKind, fileName);
 public abstract Task <Solution> GetModifiedSolutionAsync(Document document, TextSpan textSpan, MoveTypeOperationKind operationKind, CancellationToken cancellationToken);