diff --git a/TeamCity.MSBuild.Logger.Tests/ColorStorageTests.cs b/TeamCity.MSBuild.Logger.Tests/ColorStorageTests.cs index 5d7c5c2..b4faab7 100644 --- a/TeamCity.MSBuild.Logger.Tests/ColorStorageTests.cs +++ b/TeamCity.MSBuild.Logger.Tests/ColorStorageTests.cs @@ -14,7 +14,7 @@ public void ShouldReturnNullColorByDefault() // When // Then - storage.Color.ShouldBe(default(Color?)); + storage.Color.ShouldBe(default); } [Fact] @@ -42,7 +42,7 @@ public void ShouldResetColor() storage.ResetColor(); // Then - storage.Color.ShouldBe(default(Color?)); + storage.Color.ShouldBe(default); } [Fact] @@ -56,7 +56,7 @@ public void ShouldResetToNullWhenLastReset() storage.ResetColor(); // Then - storage.Color.ShouldBe(default(Color?)); + storage.Color.ShouldBe(default); } [Fact] @@ -73,7 +73,7 @@ public void ShouldResetToNullWhenTooManyReset() storage.ResetColor(); // Then - storage.Color.ShouldBe(default(Color?)); + storage.Color.ShouldBe(default); } } } diff --git a/TeamCity.MSBuild.Logger.Tests/Helpers/CommandLine.cs b/TeamCity.MSBuild.Logger.Tests/Helpers/CommandLine.cs index 240122b..72c91db 100644 --- a/TeamCity.MSBuild.Logger.Tests/Helpers/CommandLine.cs +++ b/TeamCity.MSBuild.Logger.Tests/Helpers/CommandLine.cs @@ -1,4 +1,5 @@ -namespace TeamCity.MSBuild.Logger.Tests.Helpers +// ReSharper disable MemberCanBePrivate.Global +namespace TeamCity.MSBuild.Logger.Tests.Helpers { using System; using System.Collections.Generic; @@ -42,25 +43,25 @@ public bool TryExecute(out CommandLineResult result) } }; - foreach (var envVar in _environmentVariables) + foreach (var (key, value) in _environmentVariables) { #if NET45 - if (envVar.Value == null) + if (value == null) { - process.StartInfo.EnvironmentVariables.Remove(envVar.Key); + process.StartInfo.EnvironmentVariables.Remove(key); } else { - process.StartInfo.EnvironmentVariables[envVar.Key] = envVar.Value; + process.StartInfo.EnvironmentVariables[key] = value; } #else - if (envVar.Value == null) + if (value == null) { - process.StartInfo.Environment.Remove(envVar.Key); + process.StartInfo.Environment.Remove(key); } else { - process.StartInfo.Environment[envVar.Key] = envVar.Value; + process.StartInfo.Environment[key] = value; } #endif } @@ -78,11 +79,13 @@ public bool TryExecute(out CommandLineResult result) process.ErrorDataReceived += (sender, args) => { - if (args.Data != null) + if (args.Data == null) { - stdError.Add(args.Data); - Console.Error.WriteLine(args.Data); + return; } + + stdError.Add(args.Data); + Console.Error.WriteLine(args.Data); }; // ReSharper disable once LocalizableElement @@ -90,7 +93,7 @@ public bool TryExecute(out CommandLineResult result) var stopwatch = new Stopwatch(); if (!process.Start()) { - result = default(CommandLineResult); + result = default; return false; } diff --git a/TeamCity.MSBuild.Logger.Tests/Helpers/IntegrationTests.cs b/TeamCity.MSBuild.Logger.Tests/Helpers/IntegrationTests.cs index ed5fbd9..66ee5fa 100644 --- a/TeamCity.MSBuild.Logger.Tests/Helpers/IntegrationTests.cs +++ b/TeamCity.MSBuild.Logger.Tests/Helpers/IntegrationTests.cs @@ -16,8 +16,8 @@ public static void ResultShouldBe([NotNull] this CommandLineResult actualResult, if (actualResult == null) throw new ArgumentNullException(nameof(actualResult)); if (expectedResult == null) throw new ArgumentNullException(nameof(expectedResult)); actualResult.ExitCode.ShouldBe(expectedResult.ExitCode); - CheckOutput(actualResult.StdOut, expectedResult.StdOut); - CheckOutput(actualResult.StdError, expectedResult.StdError); + CheckOutput(actualResult.StdOut); + CheckOutput(actualResult.StdError); if (producesTeamCityServiceMessages.HasValue) { (ServiceMessages.GetNumberServiceMessage(actualResult.StdOut) > 0).ShouldBe(producesTeamCityServiceMessages.Value); @@ -27,10 +27,9 @@ public static void ResultShouldBe([NotNull] this CommandLineResult actualResult, ServiceMessages.ResultShouldContainCorrectStructureAndSequence(actualResult.StdError); } - private static void CheckOutput([NotNull] this IEnumerable actualLines, [NotNull] IEnumerable expectedLines) + private static void CheckOutput([NotNull] this IEnumerable actualLines) { if (actualLines == null) throw new ArgumentNullException(nameof(actualLines)); - if (expectedLines == null) throw new ArgumentNullException(nameof(expectedLines)); // ReSharper disable once PossibleMultipleEnumeration var filteredActualLines = ServiceMessages.FilterTeamCityServiceMessages(actualLines).ToList(); // ReSharper disable once PossibleMultipleEnumeration @@ -44,25 +43,17 @@ private static void CheckOutput([NotNull] this IEnumerable actualLines, private static void CheckLines([CanBeNull] this string actualLine, [CanBeNull] string expectedLine) { - var modifiedActualLine = ReplaceChangableItems(actualLine); - var modifiedExpectedLine = ReplaceChangableItems(expectedLine); + var modifiedActualLine = ReplaceChangeableItems(actualLine); + var modifiedExpectedLine = ReplaceChangeableItems(expectedLine); if (modifiedActualLine != modifiedExpectedLine) { Assert.Equal(modifiedActualLine, modifiedExpectedLine); } } - private static string ReplaceChangableItems([CanBeNull] string line) - { - if (string.IsNullOrWhiteSpace(line)) - { - return line; - } + private static string ReplaceChangeableItems([CanBeNull] string line) => string.IsNullOrWhiteSpace(line) ? line : new string(ExcludeChangeableChars(line).ToArray()); - return new string(ExcludeChangableChars(line).ToArray()); - } - - private static IEnumerable ExcludeChangableChars([NotNull] IEnumerable chars) + private static IEnumerable ExcludeChangeableChars([NotNull] IEnumerable chars) { if (chars == null) throw new ArgumentNullException(nameof(chars)); foreach (var c in chars) @@ -95,19 +86,5 @@ public static string CreateLoggerString( return $"TeamCity.MSBuild.Logger.TeamCityMSBuildLogger,{loggerPath}{parameters}"; } - - public static IDictionary ExtractDictionary([CanBeNull] string dict) - { - if (string.IsNullOrWhiteSpace(dict)) - { - return new Dictionary(); - } - - return ( - from item in dict.Split(';') - let parts = item.Split('=') - where parts.Length == 2 - select new { name = parts[0].Trim(), value = parts[1].Trim() }).ToDictionary(i => i.name, i => i.value); - } } } diff --git a/TeamCity.MSBuild.Logger.Tests/Helpers/ServiceMessages.cs b/TeamCity.MSBuild.Logger.Tests/Helpers/ServiceMessages.cs index 601ae97..4987f21 100644 --- a/TeamCity.MSBuild.Logger.Tests/Helpers/ServiceMessages.cs +++ b/TeamCity.MSBuild.Logger.Tests/Helpers/ServiceMessages.cs @@ -106,6 +106,8 @@ public Message(IServiceMessage message) public string OutAttr { get; } + // ReSharper disable once MemberCanBePrivate.Local + // ReSharper disable once UnusedAutoPropertyAccessor.Local public string MessageAttr { get; } public string DetailsAttr { get; } diff --git a/TeamCity.MSBuild.Logger.Tests/TeamCityHierarchicalMessageWriterTests.cs b/TeamCity.MSBuild.Logger.Tests/TeamCityHierarchicalMessageWriterTests.cs index 1293252..04b2fdc 100644 --- a/TeamCity.MSBuild.Logger.Tests/TeamCityHierarchicalMessageWriterTests.cs +++ b/TeamCity.MSBuild.Logger.Tests/TeamCityHierarchicalMessageWriterTests.cs @@ -82,7 +82,7 @@ public void ShouldSendMessageAsIsWhenCannotParseAnyServiceMessages() { // Given var writer = CreateInstance(); - var serviceMessage = "##teamcity[abc]"; + const string serviceMessage = "##teamcity[abc]"; _serviceMessageParser.Setup(i => i.ParseServiceMessages(serviceMessage.Trim())).Returns(Enumerable.Empty()); // When diff --git a/TeamCity.MSBuild.Logger/AnsiLogWriter.cs b/TeamCity.MSBuild.Logger/AnsiLogWriter.cs index 535a2f7..61fff14 100644 --- a/TeamCity.MSBuild.Logger/AnsiLogWriter.cs +++ b/TeamCity.MSBuild.Logger/AnsiLogWriter.cs @@ -2,7 +2,6 @@ { using System; using JetBrains.Annotations; - using JetBrains.Annotations; // ReSharper disable once ClassNeverInstantiated.Global internal class AnsiLogWriter : ILogWriter diff --git a/TeamCity.MSBuild.Logger/BuildEventManager.cs b/TeamCity.MSBuild.Logger/BuildEventManager.cs index a81a1f2..d6ae1ef 100644 --- a/TeamCity.MSBuild.Logger/BuildEventManager.cs +++ b/TeamCity.MSBuild.Logger/BuildEventManager.cs @@ -37,7 +37,7 @@ public void AddProjectStartedEvent(ProjectStartedEventArgs e, bool requireTimest if (!_projectKey.TryGetValue(e.ProjectFile, out projectIncrementKey)) { - _projectIncrementKey = _projectIncrementKey + 1; + _projectIncrementKey += 1; _projectKey.Add(e.ProjectFile, _projectIncrementKey); projectIncrementKey = _projectIncrementKey; } @@ -98,13 +98,13 @@ select string.IsNullOrEmpty(projectCall.TargetNames) public ProjectStartedEventMinimumFields GetProjectStartedEvent(BuildEventContext e) { if (e == null) throw new ArgumentNullException(nameof(e)); - return _projectStartedEvents.TryGetValue(e, out ProjectStartedEventMinimumFields result) ? result : null; + return _projectStartedEvents.TryGetValue(e, out var result) ? result : null; } public TargetStartedEventMinimumFields GetTargetStartedEvent(BuildEventContext e) { if (e == null) throw new ArgumentNullException(nameof(e)); - return _targetStartedEvents.TryGetValue(e, out TargetStartedEventMinimumFields result) ? result : null; + return _targetStartedEvents.TryGetValue(e, out var result) ? result : null; } public void RemoveProjectStartedEvent(BuildEventContext e) diff --git a/TeamCity.MSBuild.Logger/ColorStorage.cs b/TeamCity.MSBuild.Logger/ColorStorage.cs index 0adc5f9..7832c6a 100644 --- a/TeamCity.MSBuild.Logger/ColorStorage.cs +++ b/TeamCity.MSBuild.Logger/ColorStorage.cs @@ -3,18 +3,10 @@ // ReSharper disable once ClassNeverInstantiated.Global internal class ColorStorage : IColorStorage { - private Color? _color = default(Color?); + public Color? Color { get; private set; } - public Color? Color => _color; + public void SetColor(Color color) => Color = color; - public void SetColor(Color color) - { - _color = color; - } - - public void ResetColor() - { - _color = default(Color?); - } + public void ResetColor() => Color = default; } } \ No newline at end of file diff --git a/TeamCity.MSBuild.Logger/DefaultColorTheme.cs b/TeamCity.MSBuild.Logger/DefaultColorTheme.cs index 9294b6e..2b82509 100644 --- a/TeamCity.MSBuild.Logger/DefaultColorTheme.cs +++ b/TeamCity.MSBuild.Logger/DefaultColorTheme.cs @@ -40,6 +40,7 @@ public ConsoleColor GetConsoleColor(Color color) public string GetAnsiColor(Color color) { + // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch (color) { case Color.Task: diff --git a/TeamCity.MSBuild.Logger/DefaultConsole.cs b/TeamCity.MSBuild.Logger/DefaultConsole.cs index 34d496e..72320fe 100644 --- a/TeamCity.MSBuild.Logger/DefaultConsole.cs +++ b/TeamCity.MSBuild.Logger/DefaultConsole.cs @@ -22,21 +22,23 @@ public DefaultConsole([NotNull] IDiagnostics diagnostics) public void Write(string text) { - if (!string.IsNullOrEmpty(text)) + if (string.IsNullOrEmpty(text)) { - // ReSharper disable once IdentifierTypo - var reentrancy = Interlocked.Increment(ref _reentrancy) - 1; - // ReSharper disable once AccessToModifiedClosure - _diagnostics.Send(() => $"[{reentrancy} +] Write({text.Trim()})"); - try - { - _out.Write(text); - } - finally - { - reentrancy = Interlocked.Decrement(ref _reentrancy); - _diagnostics.Send(() => $"[{reentrancy} -] Write({text.Trim()})"); - } + return; + } + + // ReSharper disable once IdentifierTypo + var reentrancy = Interlocked.Increment(ref _reentrancy) - 1; + // ReSharper disable once AccessToModifiedClosure + _diagnostics.Send(() => $"[{reentrancy} +] Write({text.Trim()})"); + try + { + _out.Write(text); + } + finally + { + reentrancy = Interlocked.Decrement(ref _reentrancy); + _diagnostics.Send(() => $"[{reentrancy} -] Write({text.Trim()})"); } } } diff --git a/TeamCity.MSBuild.Logger/DefaultLogWriter.cs b/TeamCity.MSBuild.Logger/DefaultLogWriter.cs index ed5e746..e62698a 100644 --- a/TeamCity.MSBuild.Logger/DefaultLogWriter.cs +++ b/TeamCity.MSBuild.Logger/DefaultLogWriter.cs @@ -34,6 +34,7 @@ private static ConsoleColor BackgroundColor { get { + // ReSharper disable once InvertIf if (_supportReadingBackgroundColor) { try diff --git a/TeamCity.MSBuild.Logger/EventHandlers/BuildFinishedHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/BuildFinishedHandler.cs index d407acc..401b307 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/BuildFinishedHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/BuildFinishedHandler.cs @@ -69,14 +69,7 @@ public void Handle(BuildFinishedEventArgs e) } else { - if (_context.ErrorCount > 0) - { - _logWriter.SetColor(Color.Error); - } - else - { - _logWriter.SetColor(Color.Warning); - } + _logWriter.SetColor(_context.ErrorCount > 0 ? Color.Error : Color.Warning); } _messageWriter.WriteNewLine(); @@ -228,7 +221,7 @@ private void ShowErrorWarningSummary([CanBeNull] IEnumerable events) where } var key = new ErrorWarningSummaryDictionaryKey(warningEventArgs.BuildEventContext, targetName); - if (!dictionary.TryGetValue(key, out List list)) + if (!dictionary.TryGetValue(key, out var list)) { list = new List(); dictionary.Add(key, list); @@ -256,7 +249,7 @@ private void ShowErrorWarningSummary([CanBeNull] IEnumerable events) where { if (!string.IsNullOrEmpty(keyValuePair.Key.TargetName)) { - _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ErrorWarningInTarget", (object)keyValuePair.Key.TargetName), false); + _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("ErrorWarningInTarget", keyValuePair.Key.TargetName), false); } curTargetName = keyValuePair.Key.TargetName; @@ -264,17 +257,15 @@ private void ShowErrorWarningSummary([CanBeNull] IEnumerable events) where foreach (var obj in keyValuePair.Value) { - var errorEventArgs = obj as BuildErrorEventArgs; - if (errorEventArgs != null) + switch (obj) { - _messageWriter.WriteMessageAligned(" " + _eventFormatter.FormatEventMessage(errorEventArgs, false, _context.Parameters.ShowProjectFile), false); - continue; - } + case BuildErrorEventArgs errorEventArgs: + _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); + case BuildWarningEventArgs warningEventArgs: + _messageWriter.WriteMessageAligned(" " + _eventFormatter.FormatEventMessage(warningEventArgs, false, _context.Parameters.ShowProjectFile), false); + break; } } diff --git a/TeamCity.MSBuild.Logger/EventHandlers/ErrorHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/ErrorHandler.cs index 69e7fcb..beed962 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/ErrorHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/ErrorHandler.cs @@ -35,7 +35,7 @@ public void Handle(BuildErrorEventArgs e) if (e == null) throw new ArgumentNullException(nameof(e)); if (e.BuildEventContext == null) throw new ArgumentException(nameof(e)); - _context.ErrorCount = _context.ErrorCount + 1; + _context.ErrorCount += 1; _buildEventManager.SetErrorWarningFlagOnCallStack(e.BuildEventContext); var targetStartedEvent = _buildEventManager.GetTargetStartedEvent(e.BuildEventContext); if (targetStartedEvent != null) diff --git a/TeamCity.MSBuild.Logger/EventHandlers/ProjectStartedHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/ProjectStartedHandler.cs index fa7e6a2..9c47064 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/ProjectStartedHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/ProjectStartedHandler.cs @@ -52,7 +52,7 @@ public void Handle(ProjectStartedEventArgs e) _performanceCounterFactory.GetOrCreatePerformanceCounter(e.ProjectFile, _context.ProjectPerformanceCounters).AddEventStarted(e.TargetNames, e.BuildEventContext, e.Timestamp, ComparerContextNodeId.Shared); } - if (_context.DeferredMessages.TryGetValue(e.BuildEventContext, out IList messages)) + if (_context.DeferredMessages.TryGetValue(e.BuildEventContext, out var messages)) { if (!_context.Parameters.ShowOnlyErrors && !_context.Parameters.ShowOnlyWarnings) { @@ -169,7 +169,7 @@ private void WriteProperties([NotNull] IEnumerable properties) _messageWriter.WriteNewLine(); } - private void WriteProperties(BuildEventArgs e, IList properties) + private void WriteProperties(BuildEventArgs e, ICollection properties) { if (_context.Parameters.ShowOnlyErrors || _context.Parameters.ShowOnlyWarnings) { diff --git a/TeamCity.MSBuild.Logger/EventHandlers/TargetFinishedHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/TargetFinishedHandler.cs index c2c1541..214a4e2 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/TargetFinishedHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/TargetFinishedHandler.cs @@ -78,7 +78,7 @@ public void Handle(TargetFinishedEventArgs e) _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); + _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TargetMessageWithId", e.Message, e.BuildEventContext.TargetId), true); } else { diff --git a/TeamCity.MSBuild.Logger/EventHandlers/TaskFinishedHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/TaskFinishedHandler.cs index eea341c..41c88c1 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/TaskFinishedHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/TaskFinishedHandler.cs @@ -50,7 +50,7 @@ public void Handle(TaskFinishedEventArgs e) _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); + _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TaskMessageWithId", e.Message, e.BuildEventContext.TaskId), prefixAlreadyWritten); } else { diff --git a/TeamCity.MSBuild.Logger/EventHandlers/TaskStartedHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/TaskStartedHandler.cs index 2027074..88c8794 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/TaskStartedHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/TaskStartedHandler.cs @@ -43,7 +43,7 @@ public void Handle(TaskStartedEventArgs e) _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); + _messageWriter.WriteMessageAligned(_stringService.FormatResourceString("TaskMessageWithId", e.Message, e.BuildEventContext.TaskId), prefixAlreadyWritten); } else { diff --git a/TeamCity.MSBuild.Logger/EventHandlers/WarningHandler.cs b/TeamCity.MSBuild.Logger/EventHandlers/WarningHandler.cs index f47f3c8..d0d8499 100644 --- a/TeamCity.MSBuild.Logger/EventHandlers/WarningHandler.cs +++ b/TeamCity.MSBuild.Logger/EventHandlers/WarningHandler.cs @@ -34,7 +34,7 @@ public void Handle(BuildWarningEventArgs e) { if (e == null) throw new ArgumentNullException(nameof(e)); if (e.BuildEventContext == null) throw new ArgumentException(nameof(e)); - _context.WarningCount = _context.WarningCount + 1; + _context.WarningCount += 1; _buildEventManager.SetErrorWarningFlagOnCallStack(e.BuildEventContext); var targetStartedEvent = _buildEventManager.GetTargetStartedEvent(e.BuildEventContext); if (targetStartedEvent != null) diff --git a/TeamCity.MSBuild.Logger/FlowIdGenerator.cs b/TeamCity.MSBuild.Logger/FlowIdGenerator.cs index 137e56e..da1b4cb 100644 --- a/TeamCity.MSBuild.Logger/FlowIdGenerator.cs +++ b/TeamCity.MSBuild.Logger/FlowIdGenerator.cs @@ -14,6 +14,7 @@ public FlowIdGenerator(Parameters parameters) => public string NewFlowId() { + // ReSharper disable once InvertIf if (_isFirst) { _isFirst = false; diff --git a/TeamCity.MSBuild.Logger/HierarchicalContext.cs b/TeamCity.MSBuild.Logger/HierarchicalContext.cs index 4b1031d..8ad7edf 100644 --- a/TeamCity.MSBuild.Logger/HierarchicalContext.cs +++ b/TeamCity.MSBuild.Logger/HierarchicalContext.cs @@ -5,7 +5,7 @@ internal class HierarchicalContext: IDisposable { - public static readonly int DefaultFlowId = 0; + public const int DefaultFlowId = 0; private static readonly HierarchicalContext Default = new HierarchicalContext(0); [CanBeNull][ThreadStatic] private static HierarchicalContext _currentHierarchicalContext; diff --git a/TeamCity.MSBuild.Logger/IMessageWriter.cs b/TeamCity.MSBuild.Logger/IMessageWriter.cs index 966c6e3..f3ba784 100644 --- a/TeamCity.MSBuild.Logger/IMessageWriter.cs +++ b/TeamCity.MSBuild.Logger/IMessageWriter.cs @@ -28,7 +28,5 @@ internal interface IMessageWriter void WriteNewLine(); bool WriteTargetMessagePrefix(BuildEventArgs e, BuildEventContext context, DateTime timeStamp); - - string IndentString([CanBeNull] string str); } } \ No newline at end of file diff --git a/TeamCity.MSBuild.Logger/IPerformanceCounter.cs b/TeamCity.MSBuild.Logger/IPerformanceCounter.cs index 1640eb5..73a52e7 100644 --- a/TeamCity.MSBuild.Logger/IPerformanceCounter.cs +++ b/TeamCity.MSBuild.Logger/IPerformanceCounter.cs @@ -1,4 +1,5 @@ -namespace TeamCity.MSBuild.Logger +// ReSharper disable UnusedMemberInSuper.Global +namespace TeamCity.MSBuild.Logger { using System; using System.Collections.Generic; diff --git a/TeamCity.MSBuild.Logger/LogWriter.cs b/TeamCity.MSBuild.Logger/LogWriter.cs index 022e522..00abc69 100644 --- a/TeamCity.MSBuild.Logger/LogWriter.cs +++ b/TeamCity.MSBuild.Logger/LogWriter.cs @@ -23,7 +23,7 @@ public LogWriter( { ColorMode.Default, defaultLogWriter ?? throw new ArgumentNullException(nameof(defaultLogWriter))}, { ColorMode.TeamCity, ansiLogWriter ?? throw new ArgumentNullException(nameof(ansiLogWriter))}, { ColorMode.NoColor, noColorLogWriter ?? throw new ArgumentNullException(nameof(noColorLogWriter))}, - { ColorMode.AnsiColor, ansiColorLogWriter ?? throw new ArgumentNullException(nameof(ansiColorLogWriter))}, + { ColorMode.AnsiColor, ansiColorLogWriter ?? throw new ArgumentNullException(nameof(ansiColorLogWriter))} }; _context = context ?? throw new ArgumentNullException(nameof(context)); diff --git a/TeamCity.MSBuild.Logger/LoggerContext.cs b/TeamCity.MSBuild.Logger/LoggerContext.cs index 161ae8f..416e836 100644 --- a/TeamCity.MSBuild.Logger/LoggerContext.cs +++ b/TeamCity.MSBuild.Logger/LoggerContext.cs @@ -21,7 +21,7 @@ public LoggerContext( public Parameters Parameters { get; private set; } - public int CurrentIndentLevel { get; } = 0; + public int CurrentIndentLevel => 0; public int NumberOfProcessors { get; private set; } @@ -87,7 +87,7 @@ public void ResetConsoleLoggerState() LastDisplayedBuildEventContext = null; LastProjectFullKey = new ProjectFullKey(-1, -1); HasBuildStarted = false; - BuildStarted = default(DateTime); + BuildStarted = default; PrefixWidth = 0; ProjectPerformanceCounters.Clear(); TargetPerformanceCounters.Clear(); @@ -102,6 +102,7 @@ public ProjectFullKey GetFullProjectKey(BuildEventContext e) eventMinimumFields = _buildEventManager.GetProjectStartedEvent(e); } + // ReSharper disable once ConvertIfStatementToReturnStatement if (eventMinimumFields == null) { return new ProjectFullKey(0, 0); diff --git a/TeamCity.MSBuild.Logger/MessageWriter.cs b/TeamCity.MSBuild.Logger/MessageWriter.cs index beb809c..518f994 100644 --- a/TeamCity.MSBuild.Logger/MessageWriter.cs +++ b/TeamCity.MSBuild.Logger/MessageWriter.cs @@ -67,7 +67,7 @@ public void WriteMessageAligned(string message, bool prefixAlreadyWritten, int p public void PrintMessage(BuildMessageEventArgs e, bool lightenText) { - var message = e.File == null ? (e.Message ?? string.Empty) : _eventFormatter.FormatEventMessage(e, false, _context.Parameters.ShowProjectFile); + 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) { @@ -208,11 +208,6 @@ private void WritePretty(int indentLevel, [NotNull] string formattedString) _logWriter.Write(stringBuilder.ToString()); } - public string IndentString(string str) - { - return IndentString(str, _context.PrefixWidth); - } - private static string IndentString([CanBeNull] string str, int indent) { if (str == null) @@ -241,7 +236,7 @@ private void PrintTargetNamePerMessage(BuildEventArgs e, bool lightenText) var buildEventContext = e.BuildEventContext; var flag1 = false; var str = string.Empty; - var flag2 = ComparerContextNodeIdTargetId.Shared.Equals(buildEventContext, _context.LastDisplayedBuildEventContext == (BuildEventContext)null ? null : _context.LastDisplayedBuildEventContext); + var flag2 = ComparerContextNodeIdTargetId.Shared.Equals(buildEventContext, _context.LastDisplayedBuildEventContext == default ? null : _context.LastDisplayedBuildEventContext); TargetStartedEventMinimumFields eventMinimumFields = null; if (!flag2) { @@ -262,7 +257,7 @@ private void PrintTargetNamePerMessage(BuildEventArgs e, bool lightenText) _logWriter.SetColor(Color.BuildStage); if (_context.IsVerbosityAtLeast(LoggerVerbosity.Diagnostic) || (_context.Parameters.ShowEventId ?? false)) { - WriteMessageAligned(_stringService.FormatResourceString("TargetMessageWithId", (object)str, (object)e.BuildEventContext.TargetId), prefixAlreadyWritten); + WriteMessageAligned(_stringService.FormatResourceString("TargetMessageWithId", str, e.BuildEventContext.TargetId), prefixAlreadyWritten); } else { diff --git a/TeamCity.MSBuild.Logger/NodeLogger.cs b/TeamCity.MSBuild.Logger/NodeLogger.cs index 33ecfdd..95b1dc9 100644 --- a/TeamCity.MSBuild.Logger/NodeLogger.cs +++ b/TeamCity.MSBuild.Logger/NodeLogger.cs @@ -8,6 +8,7 @@ using Microsoft.Build.Framework; // ReSharper disable once ClassNeverInstantiated.Global + // ReSharper disable once ClassWithVirtualMembersNeverInherited.Global internal class NodeLogger : INodeLogger { [NotNull] private readonly ILoggerContext _context; @@ -94,7 +95,7 @@ public void Initialize(IEventSource eventSource, int nodeCount) _parameters.Verbosity = Verbosity; if (Parameters != null) { - if (!_parametersParser.TryParse(Parameters, _parameters, out string error)) + if (!_parametersParser.TryParse(Parameters, _parameters, out var error)) { throw new LoggerException(error); } diff --git a/TeamCity.MSBuild.Logger/Parameters.cs b/TeamCity.MSBuild.Logger/Parameters.cs index 2a4476f..b63f89c 100644 --- a/TeamCity.MSBuild.Logger/Parameters.cs +++ b/TeamCity.MSBuild.Logger/Parameters.cs @@ -46,6 +46,7 @@ internal class Parameters public bool PlainServiceMessage { get; set; } + // ReSharper disable once MemberCanBeMadeStatic.Global public string FlowId => System.Environment.GetEnvironmentVariable("TEAMCITY_PROCESS_FLOW_ID") ?? string.Empty; public override string ToString() => $"{nameof(Debug)}: {Debug}, {nameof(ShowOnlyWarnings)}: {ShowOnlyWarnings}, {nameof(ShowEnvironment)}: {ShowEnvironment}, {nameof(Verbosity)}: {Verbosity}, {nameof(ShowPerfSummary)}: {ShowPerfSummary}, {nameof(ShowItemAndPropertyList)}: {ShowItemAndPropertyList}, {nameof(ShowSummary)}: {ShowSummary}, {nameof(ShowOnlyErrors)}: {ShowOnlyErrors}, {nameof(ShowProjectFile)}: {ShowProjectFile}, {nameof(ShowCommandLine)}: {ShowCommandLine}, {nameof(ShowTimeStamp)}: {ShowTimeStamp}, {nameof(ShowEventId)}: {ShowEventId}, {nameof(ForceNoAlign)}: {ForceNoAlign}, {nameof(AlignMessages)}: {AlignMessages}, {nameof(ShowTargetOutputs)}: {ShowTargetOutputs}, {nameof(BufferWidth)}: {BufferWidth}, {nameof(ColorMode)}: {ColorMode}, {nameof(TeamCityMode)}: {TeamCityMode}, {nameof(StatisticsMode)}: {StatisticsMode}, {nameof(ColorThemeMode)}: {ColorThemeMode}, {nameof(PlainServiceMessage)}: {PlainServiceMessage}"; diff --git a/TeamCity.MSBuild.Logger/ParametersParser.cs b/TeamCity.MSBuild.Logger/ParametersParser.cs index f2d2da9..8d1a5b1 100644 --- a/TeamCity.MSBuild.Logger/ParametersParser.cs +++ b/TeamCity.MSBuild.Logger/ParametersParser.cs @@ -37,17 +37,19 @@ public bool TryParse(string parametersString, Parameters parameters, out string parameters.AlignMessages = false; parameters.BufferWidth = -1; - if (!parameters.ForceNoAlign) + if (parameters.ForceNoAlign) { - try - { - parameters.BufferWidth = Console.BufferWidth; - parameters.AlignMessages = true; - } - catch (Exception) - { - parameters.AlignMessages = false; - } + return true; + } + + try + { + parameters.BufferWidth = Console.BufferWidth; + parameters.AlignMessages = true; + } + catch (Exception) + { + parameters.AlignMessages = false; } return true; @@ -94,6 +96,7 @@ private static bool ApplyParameter([NotNull] Parameters parameters, [NotNull] st case "V": case "VERBOSITY": + // ReSharper disable once InvertIf if (TryApplyVerbosityParameter(parameterValue, out error, out var verbosity)) { parameters.Verbosity = verbosity; @@ -123,7 +126,7 @@ private static bool ApplyParameter([NotNull] Parameters parameters, [NotNull] st return true; case "SHOWPROJECTFILE": - parameters.ShowProjectFile = parameterValue == null || (parameterValue.Length == 0 || parameterValue.ToUpperInvariant() == "TRUE"); + parameters.ShowProjectFile = string.IsNullOrEmpty(parameterValue) || parameterValue.ToUpperInvariant() == "TRUE"; return true; case "SUMMARY": @@ -186,7 +189,7 @@ private static bool TryApplyVerbosityParameter(string parameterValue, out string default: error = $"Invalid verbosity \"{parameterValue}\""; - verbosity = default(LoggerVerbosity); + verbosity = default; return false; } } diff --git a/TeamCity.MSBuild.Logger/PerformanceCounter.cs b/TeamCity.MSBuild.Logger/PerformanceCounter.cs index 9351439..ec9750e 100644 --- a/TeamCity.MSBuild.Logger/PerformanceCounter.cs +++ b/TeamCity.MSBuild.Logger/PerformanceCounter.cs @@ -54,7 +54,7 @@ public void AddEventStarted(string projectTargetNames, BuildEventContext buildEv } _startedEvent.Add(buildEventContext, eventTimeStamp.Ticks); - _calls = _calls + 1; + _calls += 1; } public void AddEventFinished(string projectTargetNames, BuildEventContext buildEventContext, DateTime eventTimeStamp) @@ -69,12 +69,12 @@ public void AddEventFinished(string projectTargetNames, BuildEventContext buildE throw new InvalidOperationException("Cannot have finished counter without started counter."); } - if (!_startedEvent.TryGetValue(buildEventContext, out long ticks)) + if (!_startedEvent.TryGetValue(buildEventContext, out var ticks)) { return; } - ElapsedTime = ElapsedTime + TimeSpan.FromTicks(eventTimeStamp.Ticks - ticks); + ElapsedTime += TimeSpan.FromTicks(eventTimeStamp.Ticks - ticks); _startedEvent.Remove(buildEventContext); } diff --git a/TeamCity.MSBuild.Logger/PerformanceCounterFactory.cs b/TeamCity.MSBuild.Logger/PerformanceCounterFactory.cs index 108b7d7..014bd1a 100644 --- a/TeamCity.MSBuild.Logger/PerformanceCounterFactory.cs +++ b/TeamCity.MSBuild.Logger/PerformanceCounterFactory.cs @@ -18,13 +18,15 @@ public PerformanceCounterFactory( public IPerformanceCounter GetOrCreatePerformanceCounter(string scopeName, IDictionary performanceCounters) { if (scopeName == null) throw new ArgumentNullException(nameof(scopeName)); - if (!performanceCounters.TryGetValue(scopeName, out IPerformanceCounter performanceCounter)) + if (performanceCounters.TryGetValue(scopeName, out var performanceCounter)) { - performanceCounter = _performanceCounterFactory(); - performanceCounter.ScopeName = scopeName; - performanceCounters.Add(scopeName, performanceCounter); + return performanceCounter; } + performanceCounter = _performanceCounterFactory(); + performanceCounter.ScopeName = scopeName; + performanceCounters.Add(scopeName, performanceCounter); + return performanceCounter; } } diff --git a/TeamCity.MSBuild.Logger/Property.cs b/TeamCity.MSBuild.Logger/Property.cs index 1880e43..323930e 100644 --- a/TeamCity.MSBuild.Logger/Property.cs +++ b/TeamCity.MSBuild.Logger/Property.cs @@ -1,6 +1,6 @@ namespace TeamCity.MSBuild.Logger { - internal struct Property + internal readonly struct Property { public readonly string Name; diff --git a/TeamCity.MSBuild.Logger/Statistics.cs b/TeamCity.MSBuild.Logger/Statistics.cs index 019f941..86500c6 100644 --- a/TeamCity.MSBuild.Logger/Statistics.cs +++ b/TeamCity.MSBuild.Logger/Statistics.cs @@ -20,7 +20,7 @@ public Statistics( _statistics = new Dictionary { { StatisticsMode.Default, defaultStatistics ?? throw new ArgumentNullException(nameof(defaultStatistics))}, - { StatisticsMode.TeamCity, teamcityStatistics ?? throw new ArgumentNullException(nameof(teamcityStatistics))}, + { StatisticsMode.TeamCity, teamcityStatistics ?? throw new ArgumentNullException(nameof(teamcityStatistics))} }; } diff --git a/TeamCity.MSBuild.Logger/StringBuilderCache.cs b/TeamCity.MSBuild.Logger/StringBuilderCache.cs index fb57b79..bb987b4 100644 --- a/TeamCity.MSBuild.Logger/StringBuilderCache.cs +++ b/TeamCity.MSBuild.Logger/StringBuilderCache.cs @@ -1,12 +1,14 @@ namespace TeamCity.MSBuild.Logger { using System; + using System.Diagnostics.CodeAnalysis; using System.Text; internal static class StringBuilderCache { [ThreadStatic] private static StringBuilder _cachedInstance; + [SuppressMessage("ReSharper", "InvertIf")] public static StringBuilder Acquire(int capacity = 16) { if (capacity <= 360) diff --git a/TeamCity.MSBuild.Logger/StringService.cs b/TeamCity.MSBuild.Logger/StringService.cs index 7c8b14d..b1ca201 100644 --- a/TeamCity.MSBuild.Logger/StringService.cs +++ b/TeamCity.MSBuild.Logger/StringService.cs @@ -10,7 +10,7 @@ internal class StringService : IStringService // ReSharper disable once IdentifierTypo public string UnescapeAll(string escapedString) { - return UnescapeAll(escapedString, out var _); + return UnescapeAll(escapedString, out _); } public string FormatResourceString(string resourceName, params object[] args) @@ -40,6 +40,7 @@ private static string UnescapeAll([CanBeNull] string escapedString, out bool esc var startIndex = 0; for (; num != -1; num = escapedString.IndexOf('%', num + 1)) { + // ReSharper disable once InvertIf if (num <= escapedString.Length - 3 && IsHexDigit(escapedString[num + 1]) && IsHexDigit(escapedString[num + 2])) { sb.Append(escapedString, startIndex, num - startIndex); diff --git a/TeamCity.MSBuild.Logger/TaskItem.cs b/TeamCity.MSBuild.Logger/TaskItem.cs index 2894e2d..f8ae427 100644 --- a/TeamCity.MSBuild.Logger/TaskItem.cs +++ b/TeamCity.MSBuild.Logger/TaskItem.cs @@ -4,7 +4,7 @@ using JetBrains.Annotations; using Microsoft.Build.Framework; - internal struct TaskItem + internal readonly struct TaskItem { public readonly string Name; diff --git a/TeamCity.MSBuild.Logger/TeamCityColorTheme.cs b/TeamCity.MSBuild.Logger/TeamCityColorTheme.cs index 3e98274..43ddfbd 100644 --- a/TeamCity.MSBuild.Logger/TeamCityColorTheme.cs +++ b/TeamCity.MSBuild.Logger/TeamCityColorTheme.cs @@ -22,6 +22,7 @@ public ConsoleColor GetConsoleColor(Color color) public string GetAnsiColor(Color color) { + // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch (color) { case Color.SummaryInfo: diff --git a/TeamCity.MSBuild.Logger/TeamCityHierarchicalMessageWriter.cs b/TeamCity.MSBuild.Logger/TeamCityHierarchicalMessageWriter.cs index ffbd9a5..84ed55c 100644 --- a/TeamCity.MSBuild.Logger/TeamCityHierarchicalMessageWriter.cs +++ b/TeamCity.MSBuild.Logger/TeamCityHierarchicalMessageWriter.cs @@ -38,18 +38,18 @@ public TeamCityHierarchicalMessageWriter( private bool TryGetFlow(int flowId, out Flow flow, bool forceCreate) { - if (!_flows.TryGetValue(flowId, out flow)) + if (_flows.TryGetValue(flowId, out flow)) { - if (forceCreate) - { - flow = new Flow(_writer, flowId == HierarchicalContext.DefaultFlowId); - _flows.Add(FlowId, flow); - return true; - } + return true; + } + if (!forceCreate) + { return false; } + flow = new Flow(_writer, flowId == HierarchicalContext.DefaultFlowId); + _flows.Add(FlowId, flow); return true; } @@ -64,16 +64,20 @@ public void StartBlock(string name) public void FinishBlock() { - if (TryGetFlow(FlowId, out var flow, false)) + if (!TryGetFlow(FlowId, out var flow, false)) { - Write("\n", flow); - flow.FinishBlock(); - if (flow.IsFinished) - { - _flows.Remove(FlowId); - flow.Dispose(); - } + return; } + + Write("\n", flow); + flow.FinishBlock(); + if (!flow.IsFinished) + { + return; + } + + _flows.Remove(FlowId); + flow.Dispose(); } public void Write(string message, IConsole console = null) @@ -110,11 +114,13 @@ public void Dispose() } _flows.Clear(); - if (_buildProblems.Count > 0) + if (_buildProblems.Count <= 0) { - _writer.WriteBuildProblem("msbuild", string.Join("\n", _buildProblems)); - _buildProblems.Clear(); + return; } + + _writer.WriteBuildProblem("msbuild", string.Join("\n", _buildProblems)); + _buildProblems.Clear(); } private void Write([NotNull] string message, [NotNull] Flow flow) @@ -140,6 +146,7 @@ private void Write([NotNull] string message, [NotNull] Flow flow) var messageState = MessageState.Normal; if (messageInfo.Color.HasValue) { + // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (messageInfo.Color.Value) { case Color.Error: @@ -163,10 +170,10 @@ private void Write([NotNull] string message, [NotNull] Flow flow) { // TeamCity service message - var trimed = text.TrimStart(); - if (trimed.StartsWith("##teamcity[", StringComparison.CurrentCultureIgnoreCase)) + var trimmed = text.TrimStart(); + if (trimmed.StartsWith("##teamcity[", StringComparison.CurrentCultureIgnoreCase)) { - foreach (var serviceMessage in _serviceMessageParser.ParseServiceMessages(trimed)) + foreach (var serviceMessage in _serviceMessageParser.ParseServiceMessages(trimmed)) { hasServiceMessage = true; flow.Write(serviceMessage); @@ -234,6 +241,7 @@ public void FinishBlock() public void Write([NotNull] string message, MessageState messageState) { if (message == null) throw new ArgumentNullException(nameof(message)); + // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch (messageState) { case MessageState.Warning: diff --git a/TeamCity.MSBuild.Logger/TeamCityMSBuildLogger.cs b/TeamCity.MSBuild.Logger/TeamCityMSBuildLogger.cs index f4596c2..7c731e3 100644 --- a/TeamCity.MSBuild.Logger/TeamCityMSBuildLogger.cs +++ b/TeamCity.MSBuild.Logger/TeamCityMSBuildLogger.cs @@ -1,4 +1,5 @@ -namespace TeamCity.MSBuild.Logger +// ReSharper disable UnusedType.Global +namespace TeamCity.MSBuild.Logger { using Microsoft.Build.Framework; diff --git a/TeamCity.MSBuild.Logger/TeamCityStatistics.cs b/TeamCity.MSBuild.Logger/TeamCityStatistics.cs index 40a06d7..366ef5a 100644 --- a/TeamCity.MSBuild.Logger/TeamCityStatistics.cs +++ b/TeamCity.MSBuild.Logger/TeamCityStatistics.cs @@ -1,7 +1,7 @@ -namespace TeamCity.MSBuild.Logger +// ReSharper disable NotAccessedField.Local +namespace TeamCity.MSBuild.Logger { using System; - using System.Globalization; using JetBrains.Annotations; using JetBrains.TeamCity.ServiceMessages.Write.Special;