public async Task <RunCodeActionResponse> Handle(RunCodeActionRequest request)
        {
            var actions = await CodeActionHelper.GetActions(_workspace, _codeActionProviders, _logger, request);

            var action = actions.FirstOrDefault(a => a.GetIdentifier().Equals(request.Identifier));

            if (action == null)
            {
                return(new RunCodeActionResponse());
            }

            _logger.LogInformation("Applying " + action);
            var operations = await action.GetOperationsAsync(CancellationToken.None);

            var solution = _workspace.CurrentSolution;

            foreach (var o in operations)
            {
                o.Apply(_workspace, CancellationToken.None);
            }

            var response      = new RunCodeActionResponse();
            var directoryName = Path.GetDirectoryName(request.FileName);
            var changes       = await FileChanges.GetFileChangesAsync(_workspace.CurrentSolution, solution, directoryName, request.WantsTextChanges);

            response.Changes = changes;
            _workspace.TryApplyChanges(_workspace.CurrentSolution);
            return(response);
        }
Exemplo n.º 2
0
 public RunCodeActionService(
     OmniSharpWorkspace workspace,
     CodeActionHelper helper,
     [ImportMany] IEnumerable <ICodeActionProvider> providers,
     ILoggerFactory loggerFactory)
     : base(workspace, helper, providers, loggerFactory.CreateLogger <RunCodeActionService>())
 {
 }
        public async Task <GetCodeActionsResponse> Handle(GetCodeActionsRequest request)
        {
            var actions = await CodeActionHelper.GetActions(_workspace, _codeActionProviders, _logger, request);

            return(new GetCodeActionsResponse {
                CodeActions = actions.Select(a => new OmniSharpCodeAction(a.GetIdentifier(), a.Title))
            });
        }
Exemplo n.º 4
0
 public GetCodeActionsService(
     OmniSharpWorkspace workspace,
     CodeActionHelper helper,
     [ImportMany] IEnumerable <ICodeActionProvider> providers,
     ILoggerFactory loggerFactory,
     ICsDiagnosticWorker diagnostics,
     CachingCodeFixProviderForProjects codeFixesForProjects)
     : base(workspace, providers, loggerFactory.CreateLogger <GetCodeActionsService>(), diagnostics, codeFixesForProjects)
 {
 }
 public RunCodeActionService(
     IAssemblyLoader loader,
     OmniSharpWorkspace workspace,
     CodeActionHelper helper,
     [ImportMany] IEnumerable <ICodeActionProvider> providers,
     ILoggerFactory loggerFactory,
     ICsDiagnosticWorker diagnostics,
     CachingCodeFixProviderForProjects codeFixesForProjects)
     : base(workspace, providers, loggerFactory.CreateLogger <RunCodeActionService>(), diagnostics, codeFixesForProjects)
 {
     _loader            = loader;
     _workspaceAssembly = _loader.LazyLoad(Configuration.RoslynWorkspaces);
 }
 public RunCodeActionService(
     IAssemblyLoader loader,
     OmniSharpWorkspace workspace,
     CodeActionHelper helper,
     [ImportMany] IEnumerable <ICodeActionProvider> providers,
     ILoggerFactory loggerFactory)
     : base(workspace, helper, providers, loggerFactory.CreateLogger <RunCodeActionService>())
 {
     _loader                  = loader;
     _workspaceAssembly       = _loader.LazyLoad(Configuration.RoslynWorkspaces);
     _renameDocumentOperation = _workspaceAssembly.LazyGetType(RenameDocumentOperation);
     _oldDocumentId           = _renameDocumentOperation.LazyGetField("_oldDocumentId", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
     _newDocumentId           = _renameDocumentOperation.LazyGetField("_newDocumentId", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
     _newFileName             = _renameDocumentOperation.LazyGetField("_newFileName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
 }
        protected BaseCodeActionService(OmniSharpWorkspace workspace, CodeActionHelper helper, IEnumerable <ICodeActionProvider> providers, ILogger logger)
        {
            this.Workspace = workspace;
            this.Providers = providers;
            this.Logger    = logger;
            this._helper   = helper;

            // Sadly, the CodeAction.NestedCodeActions property is still internal.
            var nestedCodeActionsProperty = typeof(CodeAction).GetProperty("NestedCodeActions", BindingFlags.NonPublic | BindingFlags.Instance);

            if (nestedCodeActionsProperty == null)
            {
                throw new InvalidOperationException("Could not find CodeAction.NestedCodeActions property.");
            }

            this._getNestedCodeActions = nestedCodeActionsProperty.GetGetMethod(nonPublic: true);
            if (this._getNestedCodeActions == null)
            {
                throw new InvalidOperationException("Could not retrieve 'get' method for CodeAction.NestedCodeActions property.");
            }
        }
        public async Task <RunCodeActionResponse> Handle(RunCodeActionRequest request)
        {
            var response = new RunCodeActionResponse();

            var actions = await CodeActionHelper.GetActions(_workspace, _codeActionProviders, _logger, request);

            var action = actions.FirstOrDefault(a => a.GetIdentifier().Equals(request.Identifier));

            if (action == null)
            {
                return(new RunCodeActionResponse());
            }

            _logger.LogInformation("Applying " + action);
            var operations = await action.GetOperationsAsync(CancellationToken.None);

            var solution      = _workspace.CurrentSolution;
            var changes       = Enumerable.Empty <OmniSharp.Models.ModifiedFileResponse>();
            var directoryName = Path.GetDirectoryName(request.FileName);

            foreach (var o in operations)
            {
                var applyChangesOperation = o as ApplyChangesOperation;
                if (applyChangesOperation != null)
                {
                    changes  = changes.Concat(await FileChanges.GetFileChangesAsync(applyChangesOperation.ChangedSolution, solution, directoryName, request.WantsTextChanges));
                    solution = applyChangesOperation.ChangedSolution;
                }
            }

            if (request.ApplyTextChanges)
            {
                _workspace.TryApplyChanges(solution);
            }

            response.Changes = changes;
            return(response);
        }