From 94afe971d9af03b8f5f7c36888b376c4476631dd Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Fri, 14 Oct 2022 15:13:12 +0200 Subject: [PATCH 1/3] feat: Enable Rule CA1820 --- .editorconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.editorconfig b/.editorconfig index 337760636b..09f0d3e6ac 100644 --- a/.editorconfig +++ b/.editorconfig @@ -141,6 +141,8 @@ dotnet_analyzer_diagnostic.category-Performance.severity = none #error - Uncomme dotnet_diagnostic.CA1802.severity = warning # CA1825: Avoid zero-length array allocations dotnet_diagnostic.CA1825.severity = warning +# CA1820: Test for empty strings using string length +dotnet_diagnostic.CA1820.severity = warning # Wrapping preferences csharp_wrap_before_ternary_opsigns = false From 36cfc43a596c2181278b1a86b00fb4761dca0fc8 Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Fri, 14 Oct 2022 15:14:35 +0200 Subject: [PATCH 2/3] feat: Address CA1820 Rule --- src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs | 4 ++-- src/Avalonia.Controls/AppBuilderBase.cs | 4 ++-- src/Avalonia.Controls/DateTimePickers/TimePicker.cs | 2 +- src/Avalonia.Controls/DefinitionBase.cs | 2 +- .../Remote/HtmlTransport/SimpleWebSocketHttpServer.cs | 2 +- src/Avalonia.X11/X11Structs.cs | 2 +- .../Media/TextFormatting/GraphemeBreakTestDataGenerator.cs | 6 +++--- tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs | 2 +- tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs | 2 +- tests/Avalonia.Controls.UnitTests/TextBoxTests.cs | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs b/src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs index 82670bf989..6144679b60 100644 --- a/src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs +++ b/src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs @@ -28,8 +28,8 @@ namespace Avalonia.Controls { if (targetType != null && targetType.IsNullableType()) { - String strValue = value as String; - if (strValue == String.Empty) + var strValue = value as string; + if (string.IsNullOrEmpty(strValue)) { return null; } diff --git a/src/Avalonia.Controls/AppBuilderBase.cs b/src/Avalonia.Controls/AppBuilderBase.cs index 6b7101cd49..1dfad7dcc5 100644 --- a/src/Avalonia.Controls/AppBuilderBase.cs +++ b/src/Avalonia.Controls/AppBuilderBase.cs @@ -210,9 +210,9 @@ namespace Avalonia.Controls { var moduleInitializers = from assembly in AppDomain.CurrentDomain.GetAssemblies() from attribute in assembly.GetCustomAttributes() - where attribute.ForWindowingSubsystem == "" + where string.IsNullOrEmpty(attribute.ForWindowingSubsystem) || attribute.ForWindowingSubsystem == WindowingSubsystemName - where attribute.ForRenderingSubsystem == "" + where string.IsNullOrEmpty(attribute.ForRenderingSubsystem) || attribute.ForRenderingSubsystem == RenderingSubsystemName group attribute by attribute.Name into exports select (from export in exports diff --git a/src/Avalonia.Controls/DateTimePickers/TimePicker.cs b/src/Avalonia.Controls/DateTimePickers/TimePicker.cs index a709e4fb49..c3baa6f17f 100644 --- a/src/Avalonia.Controls/DateTimePickers/TimePicker.cs +++ b/src/Avalonia.Controls/DateTimePickers/TimePicker.cs @@ -129,7 +129,7 @@ namespace Avalonia.Controls get => _clockIdentifier; set { - if (!(string.IsNullOrEmpty(value) || value == "" || value == "12HourClock" || value == "24HourClock")) + if (!(string.IsNullOrEmpty(value) || value == "12HourClock" || value == "24HourClock")) throw new ArgumentException("Invalid ClockIdentifier"); SetAndRaise(ClockIdentifierProperty, ref _clockIdentifier, value); SetGrid(); diff --git a/src/Avalonia.Controls/DefinitionBase.cs b/src/Avalonia.Controls/DefinitionBase.cs index eb09ff397a..64a02ccb46 100644 --- a/src/Avalonia.Controls/DefinitionBase.cs +++ b/src/Avalonia.Controls/DefinitionBase.cs @@ -366,7 +366,7 @@ namespace Avalonia.Controls string id = (string)value; - if (id != string.Empty) + if (!string.IsNullOrEmpty(id)) { int i = -1; while (++i < id.Length) diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs index 9a872df960..6bfae536c9 100644 --- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs +++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs @@ -72,7 +72,7 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport while (true) { line = await ReadLineAsync(); - if (line == "") + if (string.IsNullOrEmpty(line)) break; sp = line.Split(new[] {':'}, 2); headers[sp[0]] = sp[1].TrimStart(); diff --git a/src/Avalonia.X11/X11Structs.cs b/src/Avalonia.X11/X11Structs.cs index 23abd31b2c..3f0a6aeb67 100644 --- a/src/Avalonia.X11/X11Structs.cs +++ b/src/Avalonia.X11/X11Structs.cs @@ -661,7 +661,7 @@ namespace Avalonia.X11 { Type type = ev.GetType (); FieldInfo [] fields = type.GetFields (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance); for (int i = 0; i < fields.Length; i++) { - if (result != string.Empty) { + if (!string.IsNullOrEmpty(result)) { result += ", "; } object value = fields [i].GetValue (ev); diff --git a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs index f6616d74a2..9b2cb481e0 100644 --- a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs @@ -68,7 +68,7 @@ namespace Avalonia.Visuals.UnitTests.Media.TextFormatting var graphemeChars = elements[0].Replace(" × ", " ").Split(' '); - var codepoints = graphemeChars.Where(x => x != "" && x != "×") + var codepoints = graphemeChars.Where(x => !string.IsNullOrEmpty(x) && x != "×") .Select(x => Convert.ToInt32(x, 16)).ToList(); var grapheme = codepoints.ToArray(); @@ -77,10 +77,10 @@ namespace Avalonia.Visuals.UnitTests.Media.TextFormatting { var remainingChars = elements[1].Replace(" × ", " ").Split(' '); - var remaining = remainingChars.Where(x => x != "" && x != "×").Select(x => Convert.ToInt32(x, 16)).ToArray(); + var remaining = remainingChars.Where(x => !string.IsNullOrEmpty(x) && x != "×").Select(x => Convert.ToInt32(x, 16)).ToArray(); codepoints.AddRange(remaining); - } + } var data = new GraphemeBreakData { diff --git a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs index c8bd289e54..122176fbe0 100644 --- a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs @@ -99,7 +99,7 @@ namespace Avalonia.Controls.UnitTests textbox.Text = String.Empty; Dispatcher.UIThread.RunJobs(); - Assert.True(control.SearchText == String.Empty); + Assert.True(string.IsNullOrEmpty(control.SearchText)); Assert.False(control.IsDropDownOpen); Assert.True(closeEvent); }); diff --git a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs index d1fa522206..a2d0842028 100644 --- a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs @@ -559,7 +559,7 @@ namespace Avalonia.Controls.UnitTests Text = "0123456789" }; - Assert.True(target.SelectedText == ""); + Assert.True(string.IsNullOrEmpty(target.SelectedText)); target.SelectionStart = 2; target.SelectionEnd = 4; diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index 23a330c96f..f2982046e5 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -473,7 +473,7 @@ namespace Avalonia.Controls.UnitTests target.ApplyTemplate(); - Assert.True(target.SelectedText == ""); + Assert.True(string.IsNullOrEmpty(target.SelectedText)); target.SelectionStart = 2; target.SelectionEnd = 4; From a763255f3f5f1ac9df6c7d3efc3bcc197e533b33 Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Tue, 18 Oct 2022 17:10:52 +0200 Subject: [PATCH 3/3] fix: revert test changes --- .../Media/TextFormatting/GraphemeBreakTestDataGenerator.cs | 4 ++-- tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs | 2 +- tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs | 2 +- tests/Avalonia.Controls.UnitTests/TextBoxTests.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs index 9b2cb481e0..029f8e236c 100644 --- a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/GraphemeBreakTestDataGenerator.cs @@ -68,7 +68,7 @@ namespace Avalonia.Visuals.UnitTests.Media.TextFormatting var graphemeChars = elements[0].Replace(" × ", " ").Split(' '); - var codepoints = graphemeChars.Where(x => !string.IsNullOrEmpty(x) && x != "×") + var codepoints = graphemeChars.Where(x => x != "" && x != "×") .Select(x => Convert.ToInt32(x, 16)).ToList(); var grapheme = codepoints.ToArray(); @@ -77,7 +77,7 @@ namespace Avalonia.Visuals.UnitTests.Media.TextFormatting { var remainingChars = elements[1].Replace(" × ", " ").Split(' '); - var remaining = remainingChars.Where(x => !string.IsNullOrEmpty(x) && x != "×").Select(x => Convert.ToInt32(x, 16)).ToArray(); + var remaining = remainingChars.Where(x => x != "" && x != "×").Select(x => Convert.ToInt32(x, 16)).ToArray(); codepoints.AddRange(remaining); } diff --git a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs index 122176fbe0..c8bd289e54 100644 --- a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs @@ -99,7 +99,7 @@ namespace Avalonia.Controls.UnitTests textbox.Text = String.Empty; Dispatcher.UIThread.RunJobs(); - Assert.True(string.IsNullOrEmpty(control.SearchText)); + Assert.True(control.SearchText == String.Empty); Assert.False(control.IsDropDownOpen); Assert.True(closeEvent); }); diff --git a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs index a2d0842028..d1fa522206 100644 --- a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs @@ -559,7 +559,7 @@ namespace Avalonia.Controls.UnitTests Text = "0123456789" }; - Assert.True(string.IsNullOrEmpty(target.SelectedText)); + Assert.True(target.SelectedText == ""); target.SelectionStart = 2; target.SelectionEnd = 4; diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index f2982046e5..23a330c96f 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -473,7 +473,7 @@ namespace Avalonia.Controls.UnitTests target.ApplyTemplate(); - Assert.True(string.IsNullOrEmpty(target.SelectedText)); + Assert.True(target.SelectedText == ""); target.SelectionStart = 2; target.SelectionEnd = 4;