Пример #1
0
        public void RemoveTask(ErrorTask task)
        {
            lock (_tasksLock)
            {
                Tasks.Remove(task);
            }

            var ev = ErrorTagsChangedForFile;

            if (ev != null)
            {
                ev(this, new ErrorTaskEventArgs {
                    FileName = task.Document
                });
            }
        }
Пример #2
0
        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
                        });
                    }
                }
            });
        }
Пример #3
0
        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);
        }