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); }
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)) }); }
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); }