TeamCity.MSBuild.Logger/LoggerContext.cs (86 lines of code) (raw):

namespace TeamCity.MSBuild.Logger { using System; using System.Collections.Generic; using JetBrains.Annotations; using Microsoft.Build.Framework; // ReSharper disable once ClassNeverInstantiated.Global internal class LoggerContext: ILoggerContext { [NotNull] private readonly IBuildEventManager _buildEventManager; public LoggerContext( [NotNull] IBuildEventManager buildEventManager) { _buildEventManager = buildEventManager ?? throw new ArgumentNullException(nameof(buildEventManager)); ResetConsoleLoggerState(); } public LoggerVerbosity Verbosity => Parameters.Verbosity; public Parameters Parameters { get; private set; } public int CurrentIndentLevel => 0; public int NumberOfProcessors { get; private set; } public bool SkipProjectStartedText { get; private set; } [CanBeNull] public IList<BuildErrorEventArgs> ErrorList { get; private set; } [CanBeNull] public IList<BuildWarningEventArgs> WarningList { get; private set; } public IDictionary<BuildEventContext, IList<BuildMessageEventArgs>> DeferredMessages { get; } = new Dictionary<BuildEventContext, IList<BuildMessageEventArgs>>(ComparerContextNodeId.Shared); public IDictionary<string, IPerformanceCounter> ProjectPerformanceCounters { get; } = new Dictionary<string, IPerformanceCounter>(StringComparer.OrdinalIgnoreCase); public IDictionary<string, IPerformanceCounter> TargetPerformanceCounters { get; } = new Dictionary<string, IPerformanceCounter>(StringComparer.OrdinalIgnoreCase); public IDictionary<string, IPerformanceCounter> TaskPerformanceCounters { get; } = new Dictionary<string, IPerformanceCounter>(StringComparer.OrdinalIgnoreCase); public bool HasBuildStarted { get; set; } public DateTime BuildStarted { get; set; } public int ErrorCount { get; set; } public int WarningCount { get; set; } public BuildEventContext LastDisplayedBuildEventContext { get; set; } public int PrefixWidth { get; set; } public ProjectFullKey LastProjectFullKey { get; set; } public void Initialize( int numberOfProcessors, bool skipProjectStartedText, Parameters parameters) { NumberOfProcessors = numberOfProcessors; SkipProjectStartedText = skipProjectStartedText; Parameters = parameters; if (parameters.ShowSummary ?? false) { ErrorList = new List<BuildErrorEventArgs>(); WarningList = new List<BuildWarningEventArgs>(); } else { ErrorList = null; WarningList = null; } } public bool IsVerbosityAtLeast(LoggerVerbosity checkVerbosity) { return Verbosity >= checkVerbosity; } public void ResetConsoleLoggerState() { ErrorCount = 0; WarningCount = 0; _buildEventManager.Reset(); PrefixWidth = 0; LastDisplayedBuildEventContext = null; LastProjectFullKey = new ProjectFullKey(-1, -1); HasBuildStarted = false; BuildStarted = default; PrefixWidth = 0; ProjectPerformanceCounters.Clear(); TargetPerformanceCounters.Clear(); TaskPerformanceCounters.Clear(); } public ProjectFullKey GetFullProjectKey(BuildEventContext e) { ProjectStartedEventMinimumFields eventMinimumFields = null; if (e != null) { eventMinimumFields = _buildEventManager.GetProjectStartedEvent(e); } // ReSharper disable once ConvertIfStatementToReturnStatement if (eventMinimumFields == null) { return new ProjectFullKey(0, 0); } return new ProjectFullKey(eventMinimumFields.ProjectKey, eventMinimumFields.EntryPointKey); } } }