From b9e603fd0b7ef6a6b6ad8fb8ff80611993603d7b Mon Sep 17 00:00:00 2001 From: Zach Bray Date: Wed, 18 Oct 2023 16:57:47 +0100 Subject: [PATCH] [C#] Support DTO generation via system property. Previously, you had to pass the `CSharpDtos` FQN as the `TargetCodeGenerator` when running sbe-tool; however, that means the XML schema was parsed multiple times, as DTOs depend on flyweights, which seems wasteful. Therefore, I have introduced a system property, `sbe.csharp.generate.dtos` that also controls the generation of DTOs when targetting `CSharp`. --- .../sbe/generation/csharp/CSharp.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharp.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharp.java index 5b4870a321..24b8eddd8b 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharp.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharp.java @@ -25,11 +25,28 @@ */ public class CSharp implements TargetCodeGenerator { + private static final boolean GENERATE_DTOS = Boolean.getBoolean("sbe.csharp.generate.dtos"); + /** * {@inheritDoc} */ public CodeGenerator newInstance(final Ir ir, final String outputDir) { - return new CSharpGenerator(ir, new CSharpNamespaceOutputManager(outputDir, ir.applicableNamespace())); + final CSharpGenerator flyweightGenerator = + new CSharpGenerator(ir, new CSharpNamespaceOutputManager(outputDir, ir.applicableNamespace())); + + if (GENERATE_DTOS) + { + final CSharpDtoGenerator dtoGenerator = + new CSharpDtoGenerator(ir, new CSharpNamespaceOutputManager(outputDir, ir.applicableNamespace())); + + return () -> + { + flyweightGenerator.generate(); + dtoGenerator.generate(); + }; + } + + return flyweightGenerator; } }