public async Task Run() { var token = default(CancellationToken); var insertionAction = act as InsertionAction; if (insertionAction != null) { var insertion = await insertionAction.CreateInsertion(token).ConfigureAwait(false); var document = await IdeApp.Workbench.OpenDocument(insertion.Location.SourceTree.FilePath, documentContext.Project); var parsedDocument = await document.UpdateParseDocument(); if (parsedDocument != null) { var insertionPoints = InsertionPointService.GetInsertionPoints( document.Editor, parsedDocument, insertion.Type, insertion.Location.SourceSpan.Start ); var options = new InsertionModeOptions( insertionAction.Title, insertionPoints, point => { if (!point.Success) { return; } var node = Formatter.Format(insertion.Node, TypeSystemService.Workspace, document.GetOptionSet(), token); point.InsertionPoint.Insert(document.Editor, document, node.ToString()); // document = await Simplifier.ReduceAsync(document.AnalysisDocument, Simplifier.Annotation, cancellationToken: token).ConfigureAwait(false); } ); document.Editor.StartInsertionMode(options); return; } } var oldSolution = documentContext.AnalysisDocument.Project.Solution; var updatedSolution = oldSolution; if (RefactoringService.OptionSetCreation != null) { documentContext.RoslynWorkspace.Options = RefactoringService.OptionSetCreation(editor, documentContext); } using (var undo = editor.OpenUndoGroup()) { foreach (var operation in await act.GetOperationsAsync(token)) { var applyChanges = operation as ApplyChangesOperation; if (applyChanges == null) { operation.Apply(documentContext.RoslynWorkspace, token); continue; } if (updatedSolution == oldSolution) { updatedSolution = applyChanges.ChangedSolution; } operation.Apply(documentContext.RoslynWorkspace, token); } } await TryStartRenameSession(documentContext.RoslynWorkspace, oldSolution, updatedSolution, token); }