TeamCity.MSBuild.Logger/HierarchicalMessageWriter.cs (34 lines of code) (raw):

namespace TeamCity.MSBuild.Logger { using System; using System.Collections.Generic; using JetBrains.Annotations; using Pure.DI; // ReSharper disable once ClassNeverInstantiated.Global internal class HierarchicalMessageWriter : IHierarchicalMessageWriter { [NotNull] private readonly Dictionary<TeamCityMode, IHierarchicalMessageWriter> _hierarchicalMessageWriter; [NotNull] private readonly ILoggerContext _context; public HierarchicalMessageWriter( [NotNull] ILoggerContext context, [NotNull][Tag(TeamCityMode.Off)] IHierarchicalMessageWriter defaultHierarchicalMessageWriter, [NotNull][Tag(TeamCityMode.SupportHierarchy)] IHierarchicalMessageWriter teamcityHierarchicalMessageWriter) { _context = context ?? throw new ArgumentNullException(nameof(context)); _hierarchicalMessageWriter = new Dictionary<TeamCityMode, IHierarchicalMessageWriter> { { TeamCityMode.Off, defaultHierarchicalMessageWriter ?? throw new ArgumentNullException(nameof(defaultHierarchicalMessageWriter))}, { TeamCityMode.SupportHierarchy, teamcityHierarchicalMessageWriter ?? throw new ArgumentNullException(nameof(teamcityHierarchicalMessageWriter))} }; } private IHierarchicalMessageWriter CurrentHierarchicalMessageWriter => _hierarchicalMessageWriter[_context.Parameters?.TeamCityMode ?? TeamCityMode.Off]; public void StartBlock(string name) { if (name == null) throw new ArgumentNullException(nameof(name)); CurrentHierarchicalMessageWriter.StartBlock(name); } public void FinishBlock() { CurrentHierarchicalMessageWriter.FinishBlock(); } } }