TeamCity.CSharpInteractive/Statistics.cs (57 lines of code) (raw):

// ReSharper disable ClassNeverInstantiated.Global // ReSharper disable InvertIf namespace TeamCity.CSharpInteractive; using System.Collections.ObjectModel; using System.Diagnostics; internal class Statistics : IStatistics { private readonly Stopwatch _stopwatch = new(); private readonly List<string> _errors = new(); private readonly List<string> _warnings = new(); public IReadOnlyCollection<string> Errors { get { lock (_errors) { return new ReadOnlyCollection<string>(_errors); } } } public IReadOnlyCollection<string> Warnings { get { lock (_warnings) { return new ReadOnlyCollection<string>(_warnings); } } } public TimeSpan TimeElapsed => _stopwatch.Elapsed; public IDisposable Start() { _stopwatch.Start(); return Disposable.Create(() => _stopwatch.Stop()); } public void RegisterError(string error) { error = error.Trim(); if (!string.IsNullOrWhiteSpace(error)) { lock (_errors) { _errors.Add(error); } } } public void RegisterWarning(string warning) { warning = warning.Trim(); if (!string.IsNullOrWhiteSpace(warning)) { lock (_warnings) { _warnings.Add(warning); } } } }