public ErrorTask(string fileName, int lineNum, int lineCol, string message, ErrorType type, ErrorTaskSource source, string sourceFileName, ITextSnapshot snapshot, CodeModel.Span?span = null) { this.Document = fileName; this.Line = lineNum; this.Column = lineCol; if (string.IsNullOrEmpty(sourceFileName) || string.Equals(sourceFileName, fileName, StringComparison.OrdinalIgnoreCase)) { this.Text = message; } else { var ix = sourceFileName.LastIndexOf('\\'); var sourceFileTitle = ix >= 0 ? sourceFileName.Substring(ix + 1) : sourceFileName; this.Text = string.Format("{0}: {1}", sourceFileTitle, message); } this.Priority = type == ErrorType.Warning || type == ErrorType.CodeAnalysisError ? TaskPriority.Normal : TaskPriority.High; this.Category = TaskCategory.BuildCompile; _source = source; _sourceArg = sourceFileName; _type = type; _snapshot = snapshot; _span = span; this.Navigate += ErrorTask_Navigate; }
public void RemoveAllForSourceAndFile(ErrorTaskSource source, string sourceFileName, string fileName) { var filesToNotify = new List <string>(); lock (_tasksLock) { var tasksToRemove = (from t in Tasks.Cast <ErrorTask>() where t.Source == source && string.Equals(t.SourceArg, sourceFileName, StringComparison.OrdinalIgnoreCase) && string.Equals(t.Document, fileName, StringComparison.OrdinalIgnoreCase) select t).ToArray(); foreach (var task in tasksToRemove) { Tasks.Remove(task); if (!filesToNotify.Contains(task.Document)) { filesToNotify.Add(task.Document); } } } foreach (var file in filesToNotify) { var ev = ErrorTagsChangedForFile; if (ev != null) { ev(this, new ErrorTaskEventArgs { FileName = file }); } } }