TeamCity.MSBuild.Logger/HierarchicalContext.cs (25 lines of code) (raw):
namespace TeamCity.MSBuild.Logger
{
using System;
using JetBrains.Annotations;
internal class HierarchicalContext: IDisposable
{
public const int DefaultFlowId = 0;
private static readonly HierarchicalContext Default = new HierarchicalContext(0);
[CanBeNull][ThreadStatic] private static HierarchicalContext _currentHierarchicalContext;
private readonly HierarchicalContext _prevHierarchicalContext;
public HierarchicalContext([CanBeNull] int? flowId)
{
FlowId = flowId ?? DefaultFlowId;
_prevHierarchicalContext = _currentHierarchicalContext;
_currentHierarchicalContext = this;
}
[NotNull]
public static HierarchicalContext Current => _currentHierarchicalContext ?? Default;
public int FlowId { get; }
public void Dispose()
{
_currentHierarchicalContext = _prevHierarchicalContext;
}
}
}