public async Task Handle()

in src/PortingAssistantExtensionServer/Handlers/PortingAssistantCodeActionHandler.cs [55:123]


        public async Task<CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken)
        {
            var codeActions = new List<CommandOrCodeAction>();

            if (_solutionAnalysisService.HasSolutionAnalysisResult())
            {
                _solutionAnalysisService._openDocuments.TryGetValue(request.TextDocument.Uri, out var document);
                if (document == null) return codeActions;
                var result = await _solutionAnalysisService.AssessFileAsync(document, true);

                result.ForEach(sourceFileAnalysisResult =>
                {
                    sourceFileAnalysisResult.RecommendedActions.ForEach(recommendedAction =>
                    {
                        _solutionAnalysisService.UpdateCodeAction(recommendedAction.Description,
                            _solutionAnalysisService.GetRange(recommendedAction.TextSpan),
                            document.DocumentUri.Path,
                            recommendedAction.TextChanges);
                    });
                });
            }

            await Task.Run(() =>
            {
                foreach (var diagnostic in request.Context.Diagnostics)
                {
                    var diagnosticHash = _solutionAnalysisService.HashDiagnostic(diagnostic.Message, diagnostic.Range, request.TextDocument.Uri.Path);

                    if (_solutionAnalysisService.CodeActions.ContainsKey(diagnosticHash))
                    {
                        var textEdits = _solutionAnalysisService.CodeActions[diagnosticHash]
                            .Where(t => _solutionAnalysisService.TrimFilePath(t.FileLinePositionSpan.Path) == _solutionAnalysisService.TrimFilePath(request.TextDocument.Uri.Path))
                            .Select(t => new TextEdit()
                            {
                                NewText = t.NewText,
                                Range = new OmniSharp.Extensions.LanguageServer.Protocol.Models.Range(
                                    t.FileLinePositionSpan.StartLinePosition.Line,
                                    t.FileLinePositionSpan.StartLinePosition.Character,
                                    t.FileLinePositionSpan.EndLinePosition.Line,
                                    t.FileLinePositionSpan.EndLinePosition.Character)
                            });
                        ;

                        codeActions.Add(new CodeAction
                        {
                            Title = diagnostic.Message,
                            Kind = CodeActionKind.QuickFix,
                            Diagnostics = new List<Diagnostic>() { diagnostic },
                            Edit = new WorkspaceEdit
                            {
                                DocumentChanges = new Container<WorkspaceEditDocumentChange>(
                    new WorkspaceEditDocumentChange(
                        new TextDocumentEdit
                        {
                            TextDocument = new VersionedTextDocumentIdentifier
                            {
                                Uri = request.TextDocument.Uri
                            },
                            Edits = new TextEditContainer(
                                            textEdits
                                )
                        }))
                            }
                        });
                    }
                }
            });
            return codeActions;
        }