From 201a7a19d057a5b14ab1c03dcacc99cff313d4d7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 00:28:46 +0000 Subject: [PATCH 1/5] Initial plan From 92ad113e6bbc9748f153a23ffb5e6138b707a85c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 00:49:13 +0000 Subject: [PATCH 2/5] Fix unit tests by adding schema key parameter to SchemaContext Co-authored-by: pedrosakuma <39205549+pedrosakuma@users.noreply.github.com> --- .../DiagnosticsTests.cs | 6 ++--- tests/SbeCodeGenerator.Tests/EndianTests.cs | 8 +++--- .../MessagesCodeGeneratorTests.cs | 10 +++---- .../ParserCodeGeneratorTests.cs | 4 +-- tests/SbeCodeGenerator.Tests/SnapshotTests.cs | 18 ++++++------- ...esCodeGenerator.Message.Quote.verified.txt | 4 +-- ...esCodeGenerator.Message.Trade.verified.txt | 4 +-- .../TypesCodeGeneratorTests.cs | 26 +++++++++---------- .../UtilitiesCodeGeneratorTests.cs | 10 +++---- .../ValidationGeneratorTests.cs | 14 +++++----- 10 files changed, 52 insertions(+), 52 deletions(-) diff --git a/tests/SbeCodeGenerator.Tests/DiagnosticsTests.cs b/tests/SbeCodeGenerator.Tests/DiagnosticsTests.cs index 3c91c64..047aa6a 100644 --- a/tests/SbeCodeGenerator.Tests/DiagnosticsTests.cs +++ b/tests/SbeCodeGenerator.Tests/DiagnosticsTests.cs @@ -29,7 +29,7 @@ public void Generate_WithInvalidIntegerAttribute_EmitsDiagnostic() // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -55,7 +55,7 @@ public void Generate_WithInvalidEnumFlagValue_CompletesSuccessfully() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -83,7 +83,7 @@ public void Generate_WithInvalidOffset_CompletesSuccessfully() { // Arrange var generator = new MessagesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" diff --git a/tests/SbeCodeGenerator.Tests/EndianTests.cs b/tests/SbeCodeGenerator.Tests/EndianTests.cs index c6acb00..4b525ff 100644 --- a/tests/SbeCodeGenerator.Tests/EndianTests.cs +++ b/tests/SbeCodeGenerator.Tests/EndianTests.cs @@ -10,7 +10,7 @@ public class EndianTests public void SchemaContext_DefaultsByteOrder_IsLittleEndian() { // Arrange & Act - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Assert Assert.Equal("littleEndian", context.ByteOrder); @@ -26,7 +26,7 @@ public void ParseSchema_WithLittleEndianAttribute_SetsLittleEndian() byteOrder=""littleEndian""> "); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var messageSchemaNode = xmlDoc.DocumentElement; @@ -53,7 +53,7 @@ public void ParseSchema_WithBigEndianAttribute_SetsBigEndian() byteOrder=""bigEndian""> "); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var messageSchemaNode = xmlDoc.DocumentElement; @@ -79,7 +79,7 @@ public void ParseSchema_WithoutByteOrderAttribute_DefaultsToLittleEndian() "); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var messageSchemaNode = xmlDoc.DocumentElement; diff --git a/tests/SbeCodeGenerator.Tests/MessagesCodeGeneratorTests.cs b/tests/SbeCodeGenerator.Tests/MessagesCodeGeneratorTests.cs index 071431c..6d3d10b 100644 --- a/tests/SbeCodeGenerator.Tests/MessagesCodeGeneratorTests.cs +++ b/tests/SbeCodeGenerator.Tests/MessagesCodeGeneratorTests.cs @@ -14,7 +14,7 @@ public void Generate_WithSimpleMessage_ProducesMessageCode() { // Arrange var generator = new MessagesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -42,7 +42,7 @@ public void Generate_WithMessageContainingConstants_ProducesCodeWithConstants() { // Arrange var generator = new MessagesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -68,7 +68,7 @@ public void Generate_WithMultipleMessages_ProducesMultipleFiles() { // Arrange var generator = new MessagesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -95,7 +95,7 @@ public void Generate_WithDeprecatedFields_AddsObsoleteAttribute() { // Arrange var generator = new MessagesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -128,7 +128,7 @@ public void Generate_WithDeprecatedFieldWithSinceVersion_AddsVersionToObsoleteMe { // Arrange var generator = new MessagesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" diff --git a/tests/SbeCodeGenerator.Tests/ParserCodeGeneratorTests.cs b/tests/SbeCodeGenerator.Tests/ParserCodeGeneratorTests.cs index 0179c38..49c8ebe 100644 --- a/tests/SbeCodeGenerator.Tests/ParserCodeGeneratorTests.cs +++ b/tests/SbeCodeGenerator.Tests/ParserCodeGeneratorTests.cs @@ -13,7 +13,7 @@ public class MessageParsingHelpersTests public void MessagesIncludeTryParseHelper() { // Arrange - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -37,7 +37,7 @@ public void MessagesIncludeTryParseHelper() public void CompositesIncludeTryParseHelper() { // Arrange - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" diff --git a/tests/SbeCodeGenerator.Tests/SnapshotTests.cs b/tests/SbeCodeGenerator.Tests/SnapshotTests.cs index 9f12897..c3e7792 100644 --- a/tests/SbeCodeGenerator.Tests/SnapshotTests.cs +++ b/tests/SbeCodeGenerator.Tests/SnapshotTests.cs @@ -28,7 +28,7 @@ public Task TypesCodeGenerator_GeneratesConsistentEnumCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); @@ -48,7 +48,7 @@ public Task TypesCodeGenerator_GeneratesConsistentSetCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); @@ -68,7 +68,7 @@ public Task TypesCodeGenerator_GeneratesConsistentCompositeCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); @@ -87,7 +87,7 @@ public Task TypesCodeGenerator_GeneratesConsistentCompositeCode() public Task MessagesCodeGenerator_GeneratesConsistentTradeMessage() { // Arrange - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // First run TypesCodeGenerator to populate the context var typesGenerator = new TypesCodeGenerator(); @@ -97,7 +97,7 @@ public Task MessagesCodeGenerator_GeneratesConsistentTradeMessage() var generator = new MessagesCodeGenerator(); // Act - var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); + var results = generator.Generate("TestNamespace.V0", _testSchema, context, default(SourceProductionContext)); // Find the Trade message var messageResult = results.FirstOrDefault(r => r.name.Contains("Trade") && !r.name.Contains("Parser")); @@ -113,7 +113,7 @@ public Task MessagesCodeGenerator_GeneratesConsistentTradeMessage() public Task MessagesCodeGenerator_GeneratesConsistentQuoteMessage() { // Arrange - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // First run TypesCodeGenerator to populate the context var typesGenerator = new TypesCodeGenerator(); @@ -123,7 +123,7 @@ public Task MessagesCodeGenerator_GeneratesConsistentQuoteMessage() var generator = new MessagesCodeGenerator(); // Act - var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); + var results = generator.Generate("TestNamespace.V0", _testSchema, context, default(SourceProductionContext)); // Find the Quote message var messageResult = results.FirstOrDefault(r => r.name.Contains("Quote") && !r.name.Contains("Parser")); @@ -140,7 +140,7 @@ public Task UtilitiesCodeGenerator_GeneratesConsistentNumberExtensions() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); @@ -157,7 +157,7 @@ public Task UtilitiesCodeGenerator_GeneratesConsistentEndianHelpers() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); // Act var results = generator.Generate("TestNamespace", _testSchema, context, default(SourceProductionContext)); diff --git a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt index 985654d..d91aa57 100644 --- a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt +++ b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt @@ -1,5 +1,5 @@ -using TestNamespace; -using TestNamespace.Runtime; +using TestNamespace.V0; +using TestNamespace.V0.Runtime; using System.Runtime.InteropServices; namespace TestNamespace.V0; /// diff --git a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt index 4bb4de0..26da9c9 100644 --- a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt +++ b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt @@ -1,5 +1,5 @@ -using TestNamespace; -using TestNamespace.Runtime; +using TestNamespace.V0; +using TestNamespace.V0.Runtime; using System.Runtime.InteropServices; namespace TestNamespace.V0; /// diff --git a/tests/SbeCodeGenerator.Tests/TypesCodeGeneratorTests.cs b/tests/SbeCodeGenerator.Tests/TypesCodeGeneratorTests.cs index 719b742..f116ac6 100644 --- a/tests/SbeCodeGenerator.Tests/TypesCodeGeneratorTests.cs +++ b/tests/SbeCodeGenerator.Tests/TypesCodeGeneratorTests.cs @@ -13,7 +13,7 @@ public void Generate_WithSimpleEnum_ProducesEnumCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -43,7 +43,7 @@ public void Generate_WithSimpleType_ProducesTypeCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -68,7 +68,7 @@ public void Generate_WithComposite_ProducesCompositeCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -96,7 +96,7 @@ public void Generate_WithSet_ProducesSetCode() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -128,7 +128,7 @@ public void Generate_TypeDefinition_IncludesReadonlyModifier() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -153,7 +153,7 @@ public void Generate_TypeDefinition_IncludesConstructor() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -178,7 +178,7 @@ public void Generate_TypeDefinition_IncludesImplicitConversion() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -203,7 +203,7 @@ public void Generate_TypeDefinition_IncludesExplicitConversion() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -228,7 +228,7 @@ public void Generate_TypeDefinition_AllPhase1Features_IntegrationTest() { // Arrange var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -262,7 +262,7 @@ public void Generate_RefStruct_IncludesReadonlyModifier() { // Arrange - Phase 3 Option 1: readonly ref structs var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -295,7 +295,7 @@ public void Generate_RefStruct_IncludesConstructor() { // Arrange - Phase 3 Option 1: ref struct constructors var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -326,7 +326,7 @@ public void Generate_RefStruct_CreateMethodUsesConstructor() { // Arrange - Phase 3 Option 1: Create method should use constructor var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" @@ -358,7 +358,7 @@ public void Generate_BlittableComposite_RemainsUnchanged() { // Arrange - Blittable composites should NOT be readonly ref structs var generator = new TypesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@" diff --git a/tests/SbeCodeGenerator.Tests/UtilitiesCodeGeneratorTests.cs b/tests/SbeCodeGenerator.Tests/UtilitiesCodeGeneratorTests.cs index 18d7a8e..85485d5 100644 --- a/tests/SbeCodeGenerator.Tests/UtilitiesCodeGeneratorTests.cs +++ b/tests/SbeCodeGenerator.Tests/UtilitiesCodeGeneratorTests.cs @@ -13,7 +13,7 @@ public void Generate_ProducesNumberExtensions() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(""); @@ -32,7 +32,7 @@ public void Generate_ProducesEndianHelpers() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(""); @@ -51,7 +51,7 @@ public void Generate_UsesProvidedNamespace() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(""); @@ -69,7 +69,7 @@ public void Generate_ProducesSpanReader() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(""); @@ -88,7 +88,7 @@ public void Generate_ProducesSpanWriter() { // Arrange var generator = new UtilitiesCodeGenerator(); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(""); diff --git a/tests/SbeCodeGenerator.Tests/ValidationGeneratorTests.cs b/tests/SbeCodeGenerator.Tests/ValidationGeneratorTests.cs index 682d891..e798bb2 100644 --- a/tests/SbeCodeGenerator.Tests/ValidationGeneratorTests.cs +++ b/tests/SbeCodeGenerator.Tests/ValidationGeneratorTests.cs @@ -28,7 +28,7 @@ public void Generate_WithMinMaxConstraints_ProducesValidationCode() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act @@ -72,7 +72,7 @@ public void Generate_WithoutConstraints_DoesNotProduceValidationCode() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act @@ -98,7 +98,7 @@ public void Generate_WithMinValueOnly_ProducesMinValidationCode() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act @@ -127,7 +127,7 @@ public void Generate_WithMaxValueOnly_ProducesMaxValidationCode() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act @@ -158,7 +158,7 @@ public void Generate_MessageWithMultipleConstraints_ProducesValidationForAll() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act @@ -192,7 +192,7 @@ public void Generate_WithConstraints_ProducesTryValidateMethod() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act @@ -235,7 +235,7 @@ public void Generate_WithConstraints_ProducesCreateValidatedMethod() var doc = new XmlDocument(); doc.LoadXml(xml); - var context = new SchemaContext(); + var context = new SchemaContext("test-schema"); var generator = new ValidationGenerator(); // Act From 2c65598f983e5abbde8b2e6d3ebe6a3ddb92e04d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 01:52:42 +0000 Subject: [PATCH 3/5] Fix MessagesCodeGenerator to use base namespace for runtime types and update test schemas Co-authored-by: pedrosakuma <39205549+pedrosakuma@users.noreply.github.com> --- src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs | 7 +------ .../GeneratorIntegrationTests.cs | 1 + .../TestSchemas/deprecated-test-schema.xml | 2 +- .../TestSchemas/versioning-test-schema.xml | 2 +- .../MessagesCodeGenerator.Message.Quote.verified.txt | 4 ++-- .../MessagesCodeGenerator.Message.Trade.verified.txt | 4 ++-- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs b/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs index 167f1a0..b68a60d 100644 --- a/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs +++ b/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs @@ -53,7 +53,7 @@ public class MessagesCodeGenerator : ICodeGenerator var generator = new MessageDefinition( versionNamespace, - ns, + baseNamespace, generatedMessageName, messageDto.Id, $"{messageDto.Description} (Version {version})", @@ -205,11 +205,6 @@ private static string GetVersionNamespace(string baseNamespace, string schemaNam return string.IsNullOrEmpty(schemaNamespace) ? baseNamespace : schemaNamespace; } - if (!string.IsNullOrEmpty(schemaNamespace)) - { - return string.Concat(schemaNamespace, ".V", version); - } - if (!string.IsNullOrEmpty(baseNamespace)) { return string.Concat(baseNamespace, ".V", version); diff --git a/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs b/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs index 3c0bcd6..3e2554d 100644 --- a/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs +++ b/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +using Integration.Test; using Integration.Test.V0; namespace SbeCodeGenerator.IntegrationTests diff --git a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml index da3acda..9a5aa95 100644 --- a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml +++ b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml @@ -2,7 +2,7 @@ diff --git a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml index 4f19107..59f4540 100644 --- a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml +++ b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml @@ -2,7 +2,7 @@ diff --git a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt index d91aa57..985654d 100644 --- a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt +++ b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt @@ -1,5 +1,5 @@ -using TestNamespace.V0; -using TestNamespace.V0.Runtime; +using TestNamespace; +using TestNamespace.Runtime; using System.Runtime.InteropServices; namespace TestNamespace.V0; /// diff --git a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt index 26da9c9..4bb4de0 100644 --- a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt +++ b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt @@ -1,5 +1,5 @@ -using TestNamespace.V0; -using TestNamespace.V0.Runtime; +using TestNamespace; +using TestNamespace.Runtime; using System.Runtime.InteropServices; namespace TestNamespace.V0; /// From 1f7a16ceaab9483522939aa6c2204da132135dd0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 01:57:29 +0000 Subject: [PATCH 4/5] Add version stripping to TypesCodeGenerator and UtilitiesCodeGenerator Co-authored-by: pedrosakuma <39205549+pedrosakuma@users.noreply.github.com> --- .../Generators/TypesCodeGenerator.cs | 45 +++++++++++++++-- .../Generators/UtilitiesCodeGenerator.cs | 48 +++++++++++++++++-- 2 files changed, 84 insertions(+), 9 deletions(-) diff --git a/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs b/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs index 0d7dcb0..61f0125 100644 --- a/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs +++ b/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs @@ -34,15 +34,18 @@ public class TypesCodeGenerator : ICodeGenerator public IEnumerable<(string name, string content)> Generate(string ns, XmlDocument xmlDocument, SchemaContext context, SourceProductionContext sourceContext) { + // Strip version suffix to use base namespace for types + var baseNamespace = StripSchemaVersion(ns); + var typeNodes = xmlDocument.SelectNodes("//types/*"); foreach (XmlElement typeNode in typeNodes) { var generatedType = typeNode.Name switch { - "composite" => GenerateComposite(ns, typeNode, context, sourceContext), - "enum" => GenerateEnum(ns, typeNode, context, sourceContext), - "type" => GenerateType(ns, typeNode, context, sourceContext), - "set" => GenerateSet(ns, typeNode, context, sourceContext), + "composite" => GenerateComposite(baseNamespace, typeNode, context, sourceContext), + "enum" => GenerateEnum(baseNamespace, typeNode, context, sourceContext), + "type" => GenerateType(baseNamespace, typeNode, context, sourceContext), + "set" => GenerateSet(baseNamespace, typeNode, context, sourceContext), _ => Enumerable.Empty<(string name, string content)>() }; foreach (var item in generatedType) @@ -370,5 +373,39 @@ private static string NormalizeValueRef(string valueRef, SchemaContext context) return string.Concat(normalizedType, separator, remainder); } + + private static string StripSchemaVersion(string schemaNamespace) + { + if (string.IsNullOrEmpty(schemaNamespace)) + return string.Empty; + + var segments = schemaNamespace.Split('.'); + if (segments.Length == 0) + return string.Empty; + + var last = segments[segments.Length - 1]; + if (!IsVersionSegment(last)) + return schemaNamespace; + + if (segments.Length == 1) + return string.Empty; + + return string.Join(".", segments.Take(segments.Length - 1)); + } + + private static bool IsVersionSegment(string segment) + { + if (string.IsNullOrEmpty(segment) || segment.Length < 2 || segment[0] != 'V') + return false; + + for (int i = 1; i < segment.Length; i++) + { + char ch = segment[i]; + if (!char.IsDigit(ch) && ch != '_') + return false; + } + + return true; + } } } diff --git a/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs b/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs index 370b16f..4a19f08 100644 --- a/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs +++ b/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs @@ -1,6 +1,7 @@ using Microsoft.CodeAnalysis; using System; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Xml; @@ -13,17 +14,20 @@ public class UtilitiesCodeGenerator : ICodeGenerator { public IEnumerable<(string name, string content)> Generate(string ns, XmlDocument xmlDocument, SchemaContext context, SourceProductionContext sourceContext) { + // Strip version suffix to use base namespace for utilities + var baseNamespace = StripSchemaVersion(ns); + // Generate NumberExtensions StringBuilder sb = new StringBuilder(); - new NumberExtensions(ns).AppendFileContent(sb); - yield return (context.CreateHintName(ns, "Utilities", "NumberExtensions"), sb.ToString()); + new NumberExtensions(baseNamespace).AppendFileContent(sb); + yield return (context.CreateHintName(baseNamespace, "Utilities", "NumberExtensions"), sb.ToString()); // Generate EndianHelpers sb = new StringBuilder(); - new EndianHelpers(ns).AppendFileContent(sb); - yield return (context.CreateHintName(ns, "Utilities", "EndianHelpers"), sb.ToString()); + new EndianHelpers(baseNamespace).AppendFileContent(sb); + yield return (context.CreateHintName(baseNamespace, "Utilities", "EndianHelpers"), sb.ToString()); - var runtimeNamespace = ns; + var runtimeNamespace = baseNamespace; if (context.GeneratedRuntimeNamespaces.Add(runtimeNamespace)) { @@ -38,5 +42,39 @@ public class UtilitiesCodeGenerator : ICodeGenerator yield return (context.CreateHintName(runtimeNamespace, "Runtime", "SpanWriter"), sb.ToString()); } } + + private static string StripSchemaVersion(string schemaNamespace) + { + if (string.IsNullOrEmpty(schemaNamespace)) + return string.Empty; + + var segments = schemaNamespace.Split('.'); + if (segments.Length == 0) + return string.Empty; + + var last = segments[segments.Length - 1]; + if (!IsVersionSegment(last)) + return schemaNamespace; + + if (segments.Length == 1) + return string.Empty; + + return string.Join(".", segments.Take(segments.Length - 1)); + } + + private static bool IsVersionSegment(string segment) + { + if (string.IsNullOrEmpty(segment) || segment.Length < 2 || segment[0] != 'V') + return false; + + for (int i = 1; i < segment.Length; i++) + { + char ch = segment[i]; + if (!char.IsDigit(ch) && ch != '_') + return false; + } + + return true; + } } } From 071cb4811790191ed6a85e574a5d8bca2f03bc45 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Oct 2025 09:59:45 +0000 Subject: [PATCH 5/5] Revert problematic namespace changes from commits 2c65598 and 1f7a16c Co-authored-by: pedrosakuma <39205549+pedrosakuma@users.noreply.github.com> --- .../Generators/MessagesCodeGenerator.cs | 7 ++- .../Generators/TypesCodeGenerator.cs | 45 ++--------------- .../Generators/UtilitiesCodeGenerator.cs | 48 ++----------------- .../GeneratorIntegrationTests.cs | 1 - .../TestSchemas/deprecated-test-schema.xml | 2 +- .../TestSchemas/versioning-test-schema.xml | 2 +- ...esCodeGenerator.Message.Quote.verified.txt | 4 +- ...esCodeGenerator.Message.Trade.verified.txt | 4 +- 8 files changed, 21 insertions(+), 92 deletions(-) diff --git a/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs b/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs index b68a60d..167f1a0 100644 --- a/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs +++ b/src/SbeCodeGenerator/Generators/MessagesCodeGenerator.cs @@ -53,7 +53,7 @@ public class MessagesCodeGenerator : ICodeGenerator var generator = new MessageDefinition( versionNamespace, - baseNamespace, + ns, generatedMessageName, messageDto.Id, $"{messageDto.Description} (Version {version})", @@ -205,6 +205,11 @@ private static string GetVersionNamespace(string baseNamespace, string schemaNam return string.IsNullOrEmpty(schemaNamespace) ? baseNamespace : schemaNamespace; } + if (!string.IsNullOrEmpty(schemaNamespace)) + { + return string.Concat(schemaNamespace, ".V", version); + } + if (!string.IsNullOrEmpty(baseNamespace)) { return string.Concat(baseNamespace, ".V", version); diff --git a/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs b/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs index 61f0125..0d7dcb0 100644 --- a/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs +++ b/src/SbeCodeGenerator/Generators/TypesCodeGenerator.cs @@ -34,18 +34,15 @@ public class TypesCodeGenerator : ICodeGenerator public IEnumerable<(string name, string content)> Generate(string ns, XmlDocument xmlDocument, SchemaContext context, SourceProductionContext sourceContext) { - // Strip version suffix to use base namespace for types - var baseNamespace = StripSchemaVersion(ns); - var typeNodes = xmlDocument.SelectNodes("//types/*"); foreach (XmlElement typeNode in typeNodes) { var generatedType = typeNode.Name switch { - "composite" => GenerateComposite(baseNamespace, typeNode, context, sourceContext), - "enum" => GenerateEnum(baseNamespace, typeNode, context, sourceContext), - "type" => GenerateType(baseNamespace, typeNode, context, sourceContext), - "set" => GenerateSet(baseNamespace, typeNode, context, sourceContext), + "composite" => GenerateComposite(ns, typeNode, context, sourceContext), + "enum" => GenerateEnum(ns, typeNode, context, sourceContext), + "type" => GenerateType(ns, typeNode, context, sourceContext), + "set" => GenerateSet(ns, typeNode, context, sourceContext), _ => Enumerable.Empty<(string name, string content)>() }; foreach (var item in generatedType) @@ -373,39 +370,5 @@ private static string NormalizeValueRef(string valueRef, SchemaContext context) return string.Concat(normalizedType, separator, remainder); } - - private static string StripSchemaVersion(string schemaNamespace) - { - if (string.IsNullOrEmpty(schemaNamespace)) - return string.Empty; - - var segments = schemaNamespace.Split('.'); - if (segments.Length == 0) - return string.Empty; - - var last = segments[segments.Length - 1]; - if (!IsVersionSegment(last)) - return schemaNamespace; - - if (segments.Length == 1) - return string.Empty; - - return string.Join(".", segments.Take(segments.Length - 1)); - } - - private static bool IsVersionSegment(string segment) - { - if (string.IsNullOrEmpty(segment) || segment.Length < 2 || segment[0] != 'V') - return false; - - for (int i = 1; i < segment.Length; i++) - { - char ch = segment[i]; - if (!char.IsDigit(ch) && ch != '_') - return false; - } - - return true; - } } } diff --git a/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs b/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs index 4a19f08..370b16f 100644 --- a/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs +++ b/src/SbeCodeGenerator/Generators/UtilitiesCodeGenerator.cs @@ -1,7 +1,6 @@ using Microsoft.CodeAnalysis; using System; using System.Collections.Generic; -using System.Linq; using System.Text; using System.Xml; @@ -14,20 +13,17 @@ public class UtilitiesCodeGenerator : ICodeGenerator { public IEnumerable<(string name, string content)> Generate(string ns, XmlDocument xmlDocument, SchemaContext context, SourceProductionContext sourceContext) { - // Strip version suffix to use base namespace for utilities - var baseNamespace = StripSchemaVersion(ns); - // Generate NumberExtensions StringBuilder sb = new StringBuilder(); - new NumberExtensions(baseNamespace).AppendFileContent(sb); - yield return (context.CreateHintName(baseNamespace, "Utilities", "NumberExtensions"), sb.ToString()); + new NumberExtensions(ns).AppendFileContent(sb); + yield return (context.CreateHintName(ns, "Utilities", "NumberExtensions"), sb.ToString()); // Generate EndianHelpers sb = new StringBuilder(); - new EndianHelpers(baseNamespace).AppendFileContent(sb); - yield return (context.CreateHintName(baseNamespace, "Utilities", "EndianHelpers"), sb.ToString()); + new EndianHelpers(ns).AppendFileContent(sb); + yield return (context.CreateHintName(ns, "Utilities", "EndianHelpers"), sb.ToString()); - var runtimeNamespace = baseNamespace; + var runtimeNamespace = ns; if (context.GeneratedRuntimeNamespaces.Add(runtimeNamespace)) { @@ -42,39 +38,5 @@ public class UtilitiesCodeGenerator : ICodeGenerator yield return (context.CreateHintName(runtimeNamespace, "Runtime", "SpanWriter"), sb.ToString()); } } - - private static string StripSchemaVersion(string schemaNamespace) - { - if (string.IsNullOrEmpty(schemaNamespace)) - return string.Empty; - - var segments = schemaNamespace.Split('.'); - if (segments.Length == 0) - return string.Empty; - - var last = segments[segments.Length - 1]; - if (!IsVersionSegment(last)) - return schemaNamespace; - - if (segments.Length == 1) - return string.Empty; - - return string.Join(".", segments.Take(segments.Length - 1)); - } - - private static bool IsVersionSegment(string segment) - { - if (string.IsNullOrEmpty(segment) || segment.Length < 2 || segment[0] != 'V') - return false; - - for (int i = 1; i < segment.Length; i++) - { - char ch = segment[i]; - if (!char.IsDigit(ch) && ch != '_') - return false; - } - - return true; - } } } diff --git a/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs b/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs index 3e2554d..3c0bcd6 100644 --- a/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs +++ b/tests/SbeCodeGenerator.IntegrationTests/GeneratorIntegrationTests.cs @@ -1,6 +1,5 @@ using System; using System.Runtime.InteropServices; -using Integration.Test; using Integration.Test.V0; namespace SbeCodeGenerator.IntegrationTests diff --git a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml index 9a5aa95..da3acda 100644 --- a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml +++ b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/deprecated-test-schema.xml @@ -2,7 +2,7 @@ diff --git a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml index 59f4540..4f19107 100644 --- a/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml +++ b/tests/SbeCodeGenerator.IntegrationTests/TestSchemas/versioning-test-schema.xml @@ -2,7 +2,7 @@ diff --git a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt index 985654d..d91aa57 100644 --- a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt +++ b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Quote.verified.txt @@ -1,5 +1,5 @@ -using TestNamespace; -using TestNamespace.Runtime; +using TestNamespace.V0; +using TestNamespace.V0.Runtime; using System.Runtime.InteropServices; namespace TestNamespace.V0; /// diff --git a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt index 4bb4de0..26da9c9 100644 --- a/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt +++ b/tests/SbeCodeGenerator.Tests/Snapshots/MessagesCodeGenerator.Message.Trade.verified.txt @@ -1,5 +1,5 @@ -using TestNamespace; -using TestNamespace.Runtime; +using TestNamespace.V0; +using TestNamespace.V0.Runtime; using System.Runtime.InteropServices; namespace TestNamespace.V0; ///