Example #1
0
        private void WriteItems([NotNull] IList <TaskItem> items)
        {
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }
            if (_context.Verbosity != LoggerVerbosity.Diagnostic || !_context.Parameters.ShowItemAndPropertyList || items.Count == 0)
            {
                return;
            }

            _logWriter.SetColor(Color.Items);
            _messageWriter.WriteLinePretty(_context.CurrentIndentLevel, _stringService.FormatResourceString("ItemListHeader"));

            var groupedItems = from item in items
                               group item by item.Name
                               into groupedByName
                               orderby groupedByName.Key.ToLowerInvariant()
                               select new { ItemType = groupedByName.Key, Items = groupedByName.Select(i => i.Item).OrderBy(i => i, TaskItemItemSpecComparer.Shared) };

            foreach (var groupedItem in groupedItems)
            {
                OutputItems(groupedItem.ItemType, groupedItem.Items);
            }

            _messageWriter.WriteNewLine();
        }
Example #2
0
        public IEnumerable <string> ProjectCallStackFromProject(BuildEventContext e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }
            var projectStartedEvent = GetProjectStartedEvent(e);

            if (projectStartedEvent == null)
            {
                return(Enumerable.Empty <string>());
            }

            return((
                       from projectCall in GetProjectCallStack(e)
                       select string.IsNullOrEmpty(projectCall.TargetNames)
                    ? _stringService.FormatResourceString("ProjectStackWithTargetNames", projectCall.ProjectFile, projectCall.TargetNames, projectCall.FullProjectKey)
                    : _stringService.FormatResourceString("ProjectStackWithDefaultTargets", projectCall.ProjectFile, projectCall.FullProjectKey))
                   .Reverse());
        }
Example #3
0
        public void PrintMessage(BuildMessageEventArgs e, bool lightenText)
        {
            var message          = e.File == null ? (e.Message ?? string.Empty) : _eventFormatter.FormatEventMessage(e, false, _context.Parameters.ShowProjectFile);
            var prefixAdjustment = 0;

            if (e.BuildEventContext.TaskId != -1 && e.File == null)
            {
                prefixAdjustment = 2;
            }

            if (lightenText)
            {
                _logWriter.SetColor(Color.Details);
            }

            PrintTargetNamePerMessage(e, lightenText);
            if ((_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false)) && e.BuildEventContext.TaskId != -1)
            {
                var prefixAlreadyWritten = WriteTargetMessagePrefix(e, e.BuildEventContext, e.Timestamp);
                WriteMessageAligned(_stringService.FormatResourceString("TaskMessageWithId", message, e.BuildEventContext.TaskId), prefixAlreadyWritten, prefixAdjustment);
            }
            else if (_context.Parameters.ShowTimeStamp || _context.IsVerbosityAtLeast(LoggerVerbosity.Detailed))
            {
                var prefixAlreadyWritten = WriteTargetMessagePrefix(e, e.BuildEventContext, e.Timestamp);
                WriteMessageAligned(message, prefixAlreadyWritten, prefixAdjustment);
            }
            else
            {
                WriteMessageAligned(message, false, prefixAdjustment);
            }

            if (!lightenText)
            {
                return;
            }

            _logWriter.ResetColor();
        }
Example #4
0
        private void OutputEnvironment(IDictionary <string, string> environment)
        {
            if (environment == null)
            {
                throw new ArgumentNullException(nameof(environment));
            }
            _logWriter.SetColor(Color.SummaryHeader);
            _hierarchicalMessageWriter.StartBlock("Environment");
            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("EnvironmentHeader"), true);
            foreach (var keyValuePair in environment)
            {
                _logWriter.SetColor(Color.SummaryInfo);
                _messageWriter.WriteMessageAligned(string.Format(CultureInfo.CurrentCulture, "{0} = {1}", keyValuePair.Key, keyValuePair.Value), false);
            }

            _hierarchicalMessageWriter.FinishBlock();
            _logWriter.ResetColor();
        }
Example #5
0
        public void Handle(TaskStartedEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }
            if (e.BuildEventContext == null)
            {
                throw new ArgumentException(nameof(e));
            }
            if (_context.IsVerbosityAtLeast(LoggerVerbosity.Detailed))
            {
                _deferredMessageWriter.DisplayDeferredStartedEvents(e.BuildEventContext);
                if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings)
                {
                    var prefixAlreadyWritten = _messageWriter.WriteTargetMessagePrefix(e, e.BuildEventContext, e.Timestamp);
                    _logWriter.SetColor(Color.Task);
                    if (_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false))
                    {
                        _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TaskMessageWithId", (object)e.Message, (object)e.BuildEventContext.TaskId), prefixAlreadyWritten);
                    }
                    else
                    {
                        _messageWriter.WriteMessageAligned(e.Message, prefixAlreadyWritten);
                    }

                    _logWriter.ResetColor();
                }

                _deferredMessageWriter.ShownBuildEventContext(e.BuildEventContext);
            }

            if (!_context.Parameters.ShowPerfSummary)
            {
                return;
            }

            _performanceCounterFactory.GetOrCreatePerformanceCounter(e.TaskName, _context.TaskPerformanceCounters).AddEventStarted(null, e.BuildEventContext, e.Timestamp, null);
        }
Example #6
0
        public void DisplayDeferredProjectStartedEvent(BuildEventContext e)
        {
            if (_context.Parameters.ShowOnlyErrors || _context.Parameters.ShowOnlyWarnings || _context.SkipProjectStartedText)
            {
                return;
            }

            var projectStartedEvent = _buildEventManager.GetProjectStartedEvent(e);

            if (projectStartedEvent == null || projectStartedEvent.ShowProjectFinishedEvent)
            {
                return;
            }

            projectStartedEvent.ShowProjectFinishedEvent = true;
            var parentProjectStartedEvent = projectStartedEvent.ParentProjectStartedEvent;

            if (parentProjectStartedEvent != null)
            {
                DisplayDeferredStartedEvents(parentProjectStartedEvent.ProjectBuildEventContext);
            }

            var projectFile       = projectStartedEvent.ProjectFile ?? string.Empty;
            var parentProjectFile = parentProjectStartedEvent?.ProjectFile;
            var targetNames       = projectStartedEvent.TargetNames;
            var nodeId            = projectStartedEvent.ProjectBuildEventContext.NodeId;
            var shortProjectFile  = _pathService.GetFileName(projectFile);

            if (parentProjectFile == null)
            {
                string message;
                string shortName;
                if (string.IsNullOrEmpty(targetNames))
                {
                    message   = _stringService.FormatResourceString("ProjectStartedTopLevelProjectWithDefaultTargets", projectFile, nodeId);
                    shortName = $"Project \"{shortProjectFile}\"";
                }
                else
                {
                    message   = _stringService.FormatResourceString("ProjectStartedTopLevelProjectWithTargetNames", projectFile, nodeId, targetNames);
                    shortName = $"Project \"{shortProjectFile}\": {targetNames}";
                }

                _hierarchicalMessageWriter.StartBlock(shortName);

                _messageWriter.WriteLinePrefix(projectStartedEvent.FullProjectKey, projectStartedEvent.TimeStamp, false);
                _logWriter.SetColor(Color.BuildStage);
                _messageWriter.WriteMessageAligned(message, true);
                _logWriter.ResetColor();
            }
            else
            {
                if (string.IsNullOrEmpty(targetNames))
                {
                    var shortName = $"Project \"{shortProjectFile}\"";
                    _hierarchicalMessageWriter.StartBlock(shortName);

                    _messageWriter.WriteLinePrefix(parentProjectStartedEvent.FullProjectKey, parentProjectStartedEvent.TimeStamp, false);
                    _logWriter.SetColor(Color.BuildStage);
                    _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectStartedWithDefaultTargetsMultiProc", parentProjectFile, parentProjectStartedEvent.FullProjectKey, projectFile, projectStartedEvent.FullProjectKey, nodeId), true);
                }
                else
                {
                    var shortName = $"Project \"{shortProjectFile}\": {targetNames}";
                    _hierarchicalMessageWriter.StartBlock(shortName);

                    _messageWriter.WriteLinePrefix(parentProjectStartedEvent.FullProjectKey, parentProjectStartedEvent.TimeStamp, false);
                    _logWriter.SetColor(Color.BuildStage);
                    _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectStartedWithTargetsMultiProc", parentProjectFile, parentProjectStartedEvent.FullProjectKey, projectFile, projectStartedEvent.FullProjectKey, nodeId, targetNames), true);
                }

                _logWriter.ResetColor();
            }

            ShownBuildEventContext(null);
        }
Example #7
0
        private void ShowErrorWarningSummary <T>([CanBeNull] IEnumerable <T> events) where T : BuildEventArgs
        {
            if (events == null)
            {
                return;
            }

            var dictionary = new Dictionary <ErrorWarningSummaryDictionaryKey, List <T> >();

            foreach (var warningEventArgs in events)
            {
                string targetName         = null;
                var    targetStartedEvent = _buildEventManager.GetTargetStartedEvent(warningEventArgs.BuildEventContext);
                if (targetStartedEvent != null)
                {
                    targetName = targetStartedEvent.TargetName;
                }

                var key = new ErrorWarningSummaryDictionaryKey(warningEventArgs.BuildEventContext, targetName);
                if (!dictionary.TryGetValue(key, out List <T> list))
                {
                    list = new List <T>();
                    dictionary.Add(key, list);
                }

                list.Add(warningEventArgs);
            }

            BuildEventContext buildEventContext = null;
            string            curTargetName     = null;

            foreach (var keyValuePair in dictionary)
            {
                if (buildEventContext != keyValuePair.Key.EntryPointContext)
                {
                    _messageWriter.WriteNewLine();
                    foreach (var message in _buildEventManager.ProjectCallStackFromProject(keyValuePair.Key.EntryPointContext))
                    {
                        _messageWriter.WriteMessageAligned(message, false);
                    }

                    buildEventContext = keyValuePair.Key.EntryPointContext;
                }

                if (string.Compare(curTargetName, keyValuePair.Key.TargetName, StringComparison.OrdinalIgnoreCase) != 0)
                {
                    if (!string.IsNullOrEmpty(keyValuePair.Key.TargetName))
                    {
                        _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ErrorWarningInTarget", (object)keyValuePair.Key.TargetName), false);
                    }

                    curTargetName = keyValuePair.Key.TargetName;
                }

                foreach (var obj in keyValuePair.Value)
                {
                    var errorEventArgs = obj as BuildErrorEventArgs;
                    if (errorEventArgs != null)
                    {
                        _messageWriter.WriteMessageAligned("  " + _eventFormatter.FormatEventMessage(errorEventArgs, false, _context.Parameters.ShowProjectFile), false);
                        continue;
                    }

                    var warningEventArgs = obj as BuildWarningEventArgs;
                    if (warningEventArgs != null)
                    {
                        _messageWriter.WriteMessageAligned("  " + _eventFormatter.FormatEventMessage(warningEventArgs, false, _context.Parameters.ShowProjectFile), false);
                    }
                }

                _messageWriter.WriteNewLine();
            }
        }
        public void Handle(ProjectFinishedEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }
            var projectStartedEvent = _buildEventManager.GetProjectStartedEvent(e.BuildEventContext);

            // ReSharper disable once LocalizableElement
            if (projectStartedEvent == null)
            {
                throw new ArgumentException($"Project finished event for {e.ProjectFile} received without matching start event", nameof(e));
            }
            if (_context.Parameters.ShowPerfSummary)
            {
                _performanceCounterFactory.GetOrCreatePerformanceCounter(e.ProjectFile, _context.ProjectPerformanceCounters).AddEventFinished(projectStartedEvent.TargetNames, e.BuildEventContext, e.Timestamp);
            }

            if (_context.IsVerbosityAtLeast(LoggerVerbosity.Normal) && projectStartedEvent.ShowProjectFinishedEvent)
            {
                _context.LastProjectFullKey = _context.GetFullProjectKey(e.BuildEventContext);
                if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings)
                {
                    _messageWriter.WriteLinePrefix(e.BuildEventContext, e.Timestamp, false);
                    _logWriter.SetColor(Color.BuildStage);
                    var targetNames = projectStartedEvent.TargetNames;
                    var projectFile = projectStartedEvent.ProjectFile ?? string.Empty;
                    if (string.IsNullOrEmpty(targetNames))
                    {
                        if (e.Succeeded)
                        {
                            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithDefaultTargetsMultiProc", projectFile), true);
                            _hierarchicalMessageWriter.FinishBlock();
                        }
                        else
                        {
                            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithDefaultTargetsMultiProcFailed", projectFile), true);
                            _hierarchicalMessageWriter.FinishBlock();
                        }
                    }
                    else
                    {
                        if (e.Succeeded)
                        {
                            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithTargetNamesMultiProc", projectFile, targetNames), true);
                            _hierarchicalMessageWriter.FinishBlock();
                        }
                        else
                        {
                            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ProjectFinishedPrefixWithTargetNamesMultiProcFailed", projectFile, targetNames), true);
                            _hierarchicalMessageWriter.FinishBlock();
                        }
                    }
                }

                _deferredMessageWriter.ShownBuildEventContext(projectStartedEvent.ProjectBuildEventContext);
                _logWriter.ResetColor();
            }

            _buildEventManager.RemoveProjectStartedEvent(e.BuildEventContext);
        }
        public void Handle(TargetFinishedEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }
            if (e.BuildEventContext == null)
            {
                throw new ArgumentException(nameof(e));
            }
            if (_context.Parameters.ShowPerfSummary)
            {
                _performanceCounterFactory.GetOrCreatePerformanceCounter(e.TargetName, _context.TargetPerformanceCounters).AddEventFinished(null, e.BuildEventContext, e.Timestamp);
            }

            if (_context.IsVerbosityAtLeast(LoggerVerbosity.Detailed))
            {
                _deferredMessageWriter.DisplayDeferredTargetStartedEvent(e.BuildEventContext);
                var targetStartedEvent = _buildEventManager.GetTargetStartedEvent(e.BuildEventContext);
                // ReSharper disable once NotResolvedInText
                if (targetStartedEvent == null)
                {
                    throw new ArgumentNullException("Started event should not be null in the finished event handler");
                }
                if (targetStartedEvent.ShowTargetFinishedEvent)
                {
                    if (_context.Parameters.ShowTargetOutputs)
                    {
                        var targetOutputs = e.TargetOutputs;
                        if (targetOutputs != null)
                        {
                            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetOutputItemsHeader"), false);
                            foreach (ITaskItem taskItem in targetOutputs)
                            {
                                _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetOutputItem", taskItem.ItemSpec), false);
                                foreach (DictionaryEntry dictionaryEntry in taskItem.CloneCustomMetadata())
                                {
                                    _messageWriter.WriteMessageAligned(new string(' ', 8) + dictionaryEntry.Key + " = " + taskItem.GetMetadata((string)dictionaryEntry.Key), false);
                                }
                            }
                        }
                    }

                    if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings)
                    {
                        _context.LastProjectFullKey = _context.GetFullProjectKey(e.BuildEventContext);
                        _messageWriter.WriteLinePrefix(e.BuildEventContext, e.Timestamp, false);
                        _logWriter.SetColor(Color.BuildStage);
                        if (_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false))
                        {
                            _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetMessageWithId", (object)e.Message, (object)e.BuildEventContext.TargetId), true);
                        }
                        else
                        {
                            _messageWriter.WriteMessageAligned(e.Message, true);
                        }

                        _logWriter.ResetColor();
                    }

                    _deferredMessageWriter.ShownBuildEventContext(e.BuildEventContext);
                    _hierarchicalMessageWriter.FinishBlock();
                }
            }

            _buildEventManager.RemoveTargetStartedEvent(e.BuildEventContext);
        }