예제 #1
0
        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;
        }
예제 #2
0
        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
                    });
                }
            }
        }