public void RemoveTask(ErrorTask task) { lock (_tasksLock) { Tasks.Remove(task); } var ev = ErrorTagsChangedForFile; if (ev != null) { ev(this, new ErrorTaskEventArgs { FileName = task.Document }); } }
public void Add(ErrorTask task, bool dontSignalTagsChanged = false) { #if DEBUG if (task == null) { throw new ArgumentNullException("task"); } #endif ThreadHelper.JoinableTaskFactory.RunAsync(async() => { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var taskLine = task.Line; var taskColumn = task.Column; var taskDocument = task.Document; var taskText = task.Text; if (Tasks.Cast <ErrorTask>().Any(t => t.Line == taskLine && t.Column == taskColumn && string.Equals(t.Document, taskDocument, StringComparison.OrdinalIgnoreCase) && t.Text == taskText)) { return; } lock (_tasksLock) { Tasks.Add(task); } if (!dontSignalTagsChanged) { var ev = ErrorTagsChangedForFile; if (ev != null) { ev(this, new ErrorTaskEventArgs { FileName = task.Document }); } } }); }
private void CompileThreadOutput(string line, bool stdErr) { if (_pane == null) { return; } var index = line.IndexOf(": error :"); if (index >= 0) { string fileName; int lineNum; if (ParseFileNameAndLine(line.Substring(0, index), out fileName, out lineNum)) { var message = line.Substring(index + ": error :".Length).Trim(); var task = new DkTools.ErrorTagging.ErrorTask(fileName, lineNum - 1, -1, message, ErrorType.Error, ErrorTaskSource.Compile, null, null); ErrorTaskProvider.Instance.Add(task); } _pane.WriteLine(line); _numErrors++; return; } index = line.IndexOf(": warning :"); if (index >= 0) { string fileName; int lineNum; if (ParseFileNameAndLine(line.Substring(0, index), out fileName, out lineNum)) { var message = line.Substring(index + ": warning :".Length).Trim(); var task = new DkTools.ErrorTagging.ErrorTask(fileName, lineNum - 1, -1, message, ErrorType.Warning, ErrorTaskSource.Compile, null, null); ErrorTaskProvider.Instance.Add(task); } _pane.WriteLine(line); _numWarnings++; return; } if (line.StartsWith("LINK : fatal error")) { var message = line.Substring("LINK : fatal error".Length).Trim(); var task = new DkTools.ErrorTagging.ErrorTask(string.Empty, 0, -1, message, ErrorType.Error, ErrorTaskSource.Compile, null, null); _pane.WriteLine(line); _numErrors++; return; } if (line.Equals("Build failed.")) { var task = new DkTools.ErrorTagging.ErrorTask(string.Empty, 0, -1, "Build failed.", ErrorType.Error, ErrorTaskSource.Compile, null, null); ErrorTaskProvider.Instance.Add(task); _buildFailed = true; _pane.WriteLine(line); return; } if (line.IndexOf("Compile failed", StringComparison.OrdinalIgnoreCase) >= 0) { var task = new DkTools.ErrorTagging.ErrorTask(string.Empty, 0, -1, line, ErrorType.Error, ErrorTaskSource.Compile, null, null); ErrorTaskProvider.Instance.Add(task); _buildFailed = true; _pane.WriteLine(line); return; } Match match; if ((match = _rxLinkError.Match(line)).Success) { _pane.WriteLineAndTask(line, line.Substring(match.Groups[1].Index), OutputPane.TaskType.Error, "", 0); _numErrors++; return; } _pane.WriteLine(line); }