public Task<bool> ExecuteAsync(ITaskCoverageManager taskCoverageManager, IVsSolutionTestCoverage vsSolutionTestCoverage, IDocumentProvider documentProvider) { string methodName = Method.Identifier.ValueText; RaiseTaskStartedEvent(taskCoverageManager); var documentSyntaxTree = documentProvider.GetSyntaxNodeFromTextSnapshot(TextBuffer.CurrentSnapshot); var methodNode = documentSyntaxTree.DescendantNodes() .OfType<MethodDeclarationSyntax>() .FirstOrDefault(x => x.Identifier.ValueText == methodName); if (methodNode == null) return Task.FromResult(false); Task<bool> task = vsSolutionTestCoverage.CalculateForSelectedMethodAsync(ProjectName, methodNode); var finalTask = task.ContinueWith((x, y) => { if(!x.Result) taskCoverageManager.ReportTaskToRetry(this); RaiseTasCompletedEvent(taskCoverageManager); return x.Result; }, null, TaskSchedulerManager.Current.FromSynchronizationContext()); return finalTask; }
public Task<bool> ExecuteAsync(ITaskCoverageManager taskCoverageManager, IVsSolutionTestCoverage vsSolutionTestCoverage, IDocumentProvider documentProvider) { taskCoverageManager.RaiseEvent(new DocumentCoverageTaskStartedArgs(DocumentPath)); string documentContent = TextBuffer.CurrentSnapshot.GetText(); var task = vsSolutionTestCoverage.CalculateForDocumentAsync(ProjectName, DocumentPath, documentContent); var finalTask = task.ContinueWith((finishedTask, y) => { if (finishedTask.Result) taskCoverageManager.Tasks.RemoveAll(t => IsTaskInDocument(t, DocumentPath)); else taskCoverageManager.ReportTaskToRetry(this); taskCoverageManager.RaiseEvent(new DocumentCoverageTaskCompletedArgs(DocumentPath)); return finishedTask.Result; }, null, TaskSchedulerManager.Current.FromSynchronizationContext()); return finalTask; }