public async void AddMessageAsync_WhenNoProjectsWithIntellisense_ReturnsNotHandled()
        {
            var provider = CreateInstance();

            var task = new TargetGeneratedTask();

            task.BuildEventArgs = new BuildErrorEventArgs(null, "Code", "File", 1, 1, 1, 1, "Message", "HelpKeyword", "Sender");

            var result = await provider.AddMessageAsync(task);

            Assert.Equal(result, AddMessageResult.NotHandled);
        }
        public async void AddMessageAsync_NullAsTaskBuildEventArgs_ReturnsNotHandled()
        {
            var provider = CreateInstance();

            var task = new TargetGeneratedTask();

            task.BuildEventArgs = null;

            var result = await provider.AddMessageAsync(task);

            Assert.Equal(result, AddMessageResult.NotHandled);
        }
        public async void AddMessageAsync_UnrecognizedArgsAsTaskBuildEventArgs_ReturnsNotHandled()
        {
            var provider = CreateInstance();

            var task = new TargetGeneratedTask();

            task.BuildEventArgs = new LazyFormattedBuildEventArgs("Message", "HelpKeyword", "SenderName");

            var result = await provider.AddMessageAsync(task);

            Assert.Equal(result, AddMessageResult.NotHandled);
        }
        private async Task <AddMessageResult> AddMessageAsyncCore(TargetGeneratedTask task)
        {
            // We only want to pass compiler, analyzers, etc to the language
            // service, so we skip tasks that do not have a code
            ErrorListDetails details;

            if (!TryExtractErrorListDetails(task.BuildEventArgs, out details) || string.IsNullOrEmpty(details.Code))
            {
                return(await NotHandled.ConfigureAwait(false));
            }

            InitializeBuildErrorReporter();

            bool handled = false;

            if (_languageServiceBuildErrorReporter != null)
            {
                try
                {
                    _languageServiceBuildErrorReporter.ReportError2(details.Message,
                                                                    details.Code,
                                                                    details.Priority,
                                                                    details.LineNumberForErrorList,
                                                                    details.ColumnNumberForErrorList,
                                                                    details.EndLineNumberForErrorList,
                                                                    details.EndColumnNumberForErrorList,
                                                                    details.FileFullPath);
                    handled = true;
                }
                catch (NotImplementedException)
                {   // Language Service doesn't handle it, typically because file
                    // isn't in the project or because it doesn't have line/column
                }
            }

            return(handled ? await HandledAndStopProcessing.ConfigureAwait(false) : await NotHandled.ConfigureAwait(false));
        }
        public Task <AddMessageResult> AddMessageAsync(TargetGeneratedTask task)
        {
            Requires.NotNull(task, nameof(task));

            return(AddMessageAsyncCore(task));
        }