From cf68ac08bd520e9a003ce0d7809a4e75acc20e5f Mon Sep 17 00:00:00 2001 From: Blaise Taylor Date: Wed, 4 Feb 2026 11:22:50 -0500 Subject: [PATCH 1/3] AB#16 Fixing Code Quality Warnings - part 4. --- .../Serialization/MarkupExtensionSerializer.cs | 2 +- .../Serialization/WorkflowMarkupSerializer.cs | 12 ++++++------ .../SynchronizationHandlesTypeConverterTest.cs | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/MarkupExtensionSerializer.cs b/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/MarkupExtensionSerializer.cs index 7b857f6..a11f8ac 100644 --- a/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/MarkupExtensionSerializer.cs +++ b/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/MarkupExtensionSerializer.cs @@ -76,7 +76,7 @@ protected internal sealed override string SerializeToString(WorkflowMarkupSerial } else { - writer.WriteString(argType.FullName); + writer.WriteString(argType?.FullName ?? string.Empty); } } else diff --git a/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs b/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs index 536d544..b0c3b48 100644 --- a/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs +++ b/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs @@ -510,8 +510,8 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization SortedDictionary allProperties = []; ArrayList complexProperties = []; - List properties = []; - List events = []; + List properties = new(); + List events = new(); // Serialize the extended properties for primitive types also if (obj.GetType().IsPrimitive || obj.GetType() == typeof(string) || obj.GetType() == typeof(decimal) || @@ -557,9 +557,9 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization { writer.WriteValue(obj); } - // For Key properties, we don;t want to get the extended properties + // For Key properties, we don't want to get the extended properties if (!dictionaryKey) - properties.AddRange(serializationManager.GetExtendedProperties(obj)); + properties?.AddRange(serializationManager.GetExtendedProperties(obj)); } else { @@ -573,11 +573,11 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization try { - properties.AddRange(serializer.GetProperties(serializationManager, obj)); + properties?.AddRange(serializer.GetProperties(serializationManager, obj)); // For Key properties, we don;t want to get the extended properties if (!dictionaryKey) properties.AddRange(serializationManager.GetExtendedProperties(obj)); - events.AddRange(serializer.GetEvents(serializationManager, obj)); + events?.AddRange(serializer.GetEvents(serializationManager, obj)); } catch (Exception e) { diff --git a/Workflow.ComponentModel.Serialization.Tests/ComponentModel/SynchronizationHandlesTypeConverterTest.cs b/Workflow.ComponentModel.Serialization.Tests/ComponentModel/SynchronizationHandlesTypeConverterTest.cs index d1b88f0..0e6003f 100644 --- a/Workflow.ComponentModel.Serialization.Tests/ComponentModel/SynchronizationHandlesTypeConverterTest.cs +++ b/Workflow.ComponentModel.Serialization.Tests/ComponentModel/SynchronizationHandlesTypeConverterTest.cs @@ -185,7 +185,7 @@ public void ConvertFrom_UnescapesCommas() string input = "handle\\,with\\,commas, normalHandle"; // Act - var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection; + var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection ?? Array.Empty(); // Assert Assert.NotNull(result); @@ -201,7 +201,7 @@ public void ConvertFrom_TrimsWhitespace() string input = " handle1 , handle2 "; // Act - var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection; + var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection ?? Array.Empty(); // Assert Assert.NotNull(result); @@ -217,7 +217,7 @@ public void ConvertFrom_HandlesNewlineDelimiters() string input = "handle1\r\nhandle2\nhandle3"; // Act - var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection; + var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection ?? Array.Empty(); // Assert Assert.NotNull(result); @@ -234,7 +234,7 @@ public void ConvertFrom_RemovesDuplicates() string input = "handle1, handle2, handle1, handle3"; // Act - var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection; + var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection ?? Array.Empty(); // Assert Assert.NotNull(result); @@ -248,7 +248,7 @@ public void ConvertFrom_SkipsEmptyEntries() string input = "handle1, ,handle2, "; // Act - var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection; + var result = _converter.ConvertFrom(null, CultureInfo.InvariantCulture, input) as ICollection ?? Array.Empty(); // Assert Assert.NotNull(result); From 61feeba5f0cf692e89333e09b3e0583b0d5a3db5 Mon Sep 17 00:00:00 2001 From: Blaise Taylor Date: Wed, 4 Feb 2026 11:26:08 -0500 Subject: [PATCH 2/3] AB#16 Fixing Code Quality Warnings - part 4 (fixing false positive for null dereference). --- .../Serialization/WorkflowMarkupSerializer.cs | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs b/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs index b0c3b48..cc033a2 100644 --- a/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs +++ b/LogicBuilder.Workflow.ComponentModel.Serialization/ComponentModel/Serialization/WorkflowMarkupSerializer.cs @@ -510,8 +510,8 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization SortedDictionary allProperties = []; ArrayList complexProperties = []; - List properties = new(); - List events = new(); + List properties = []; + List events = []; // Serialize the extended properties for primitive types also if (obj.GetType().IsPrimitive || obj.GetType() == typeof(string) || obj.GetType() == typeof(decimal) || @@ -559,7 +559,7 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization } // For Key properties, we don't want to get the extended properties if (!dictionaryKey) - properties?.AddRange(serializationManager.GetExtendedProperties(obj)); + properties.AddRange(serializationManager.GetExtendedProperties(obj)); } else { @@ -573,11 +573,11 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization try { - properties?.AddRange(serializer.GetProperties(serializationManager, obj)); + properties.AddRange(serializer.GetProperties(serializationManager, obj)); // For Key properties, we don;t want to get the extended properties if (!dictionaryKey) properties.AddRange(serializationManager.GetExtendedProperties(obj)); - events?.AddRange(serializer.GetEvents(serializationManager, obj)); + events.AddRange(serializer.GetEvents(serializationManager, obj)); } catch (Exception e) { @@ -586,24 +586,18 @@ internal void SerializeContents(WorkflowMarkupSerializationManager serialization } } - if (properties != null) + foreach (PropertyInfo propInfo in properties) { - foreach (PropertyInfo propInfo in properties) - { - // Do not serialize properties that have corresponding dynamic properties. - if (propInfo != null && !allProperties.ContainsKey(propInfo.Name)) - allProperties.Add(propInfo.Name, propInfo); - } + // Do not serialize properties that have corresponding dynamic properties. + if (propInfo != null && !allProperties.ContainsKey(propInfo.Name)) + allProperties.Add(propInfo.Name, propInfo); } - if (events != null) + foreach (EventInfo eventInfo in events) { - foreach (EventInfo eventInfo in events) - { - // Do not serialize events that have corresponding dynamic properties. - if (eventInfo != null && !allProperties.ContainsKey(eventInfo.Name)) - allProperties.Add(eventInfo.Name, eventInfo); - } + // Do not serialize events that have corresponding dynamic properties. + if (eventInfo != null && !allProperties.ContainsKey(eventInfo.Name)) + allProperties.Add(eventInfo.Name, eventInfo); } using (ContentProperty contentProperty = new(serializationManager, serializer, obj)) From ab286f8c70a354dae459f7ba52bc31bff7b1b0cd Mon Sep 17 00:00:00 2001 From: Blaise Taylor Date: Wed, 4 Feb 2026 11:27:56 -0500 Subject: [PATCH 3/3] AB#16 Remove trace listeners during test. --- .../ComponentModel/Design/HelpersTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Workflow.ComponentModel.Serialization.Tests/ComponentModel/Design/HelpersTest.cs b/Workflow.ComponentModel.Serialization.Tests/ComponentModel/Design/HelpersTest.cs index 36bec69..f5b6569 100644 --- a/Workflow.ComponentModel.Serialization.Tests/ComponentModel/Design/HelpersTest.cs +++ b/Workflow.ComponentModel.Serialization.Tests/ComponentModel/Design/HelpersTest.cs @@ -121,6 +121,7 @@ public void CreateXmlWriter_WithInvalidType_ReturnsNull() public void CreateXmlWriter_WithNull_ReturnsNull() { // Arrange + System.Diagnostics.Trace.Listeners.Clear(); object? nullOutput = null; // Act