예제 #1
0
        public static ErrorTask AddTask(this ErrorListProvider errorListProvider, Diagnostic diagnostic, DTEProject project)
        {
            if (errorListProvider == null)
            {
                throw new ArgumentNullException(nameof(errorListProvider));
            }
            if (diagnostic == null)
            {
                throw new ArgumentNullException(nameof(diagnostic));
            }
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            TaskErrorCategory category;

            switch (diagnostic.Severity)
            {
            case DiagnosticSeverity.Hidden:
                category = TaskErrorCategory.Message;
                break;

            case DiagnosticSeverity.Info:
                category = TaskErrorCategory.Message;
                break;

            case DiagnosticSeverity.Warning:
                category = TaskErrorCategory.Warning;
                break;

            case DiagnosticSeverity.Error:
                category = TaskErrorCategory.Error;
                break;

            default:
                category = TaskErrorCategory.Message;
                break;
            }

            var task = new ErrorTask
            {
                ErrorCategory = category,
                CanDelete     = true,
                Category      = TaskCategory.Misc,
                Text          = diagnostic.GetMessage(),
                Line          = diagnostic.Location.GetLineSpan().StartLinePosition.Line,
                Column        = diagnostic.Location.GetLineSpan().StartLinePosition.Character,
                Document      = diagnostic.Location.GetLineSpan().Path,
                HierarchyItem = project.GetProjectHierarchyItem()
            };

            task.Navigate += (sender, e) =>
            {
                //there are two Bugs in the errorListProvider.Navigate method:
                //    Line number needs adjusting
                //    Column is not shown
                task.Line++;
                errorListProvider.Navigate(task, new Guid(EnvDTE.Constants.vsViewKindCode));
                task.Line--;
            };

            errorListProvider.Tasks.Add(task);

            return(task);
        }