From 07ffdf03eb4cc15c05c7b2706e816760957eef6a Mon Sep 17 00:00:00 2001 From: James Courtney Date: Thu, 22 Feb 2024 01:32:28 -0800 Subject: [PATCH] Give reference unions the exception treatment --- .../SchemaModel/ReferenceUnionSchemaModel.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/FlatSharp.Compiler/SchemaModel/ReferenceUnionSchemaModel.cs b/src/FlatSharp.Compiler/SchemaModel/ReferenceUnionSchemaModel.cs index acb3971e..b866375b 100644 --- a/src/FlatSharp.Compiler/SchemaModel/ReferenceUnionSchemaModel.cs +++ b/src/FlatSharp.Compiler/SchemaModel/ReferenceUnionSchemaModel.cs @@ -125,7 +125,7 @@ private void AddUnionMember(CodeWriter writer, string resolvedType, EnumVal valu writer.AppendLine($"if (this.Discriminator != {value.Value})"); using (writer.WithBlock()) { - writer.AppendLine("throw new InvalidOperationException();"); + writer.AppendLine($"{typeof(FSThrow).GGCTN()}.{nameof(FSThrow.InvalidOperation_UnionIsNotOfType)}();"); } writer.AppendLine($"return this.value_{value.Value}!;"); @@ -189,8 +189,12 @@ private void WriteAcceptMethod( long index = item.value.Value; writer.AppendLine($"case {index}: return visitor.Visit(this.value_{item.value.Value});"); } - - writer.AppendLine($"default: throw new {typeof(InvalidOperationException).GetCompilableTypeName()}(\"Unexpected discriminator: \" + disc);"); + writer.AppendLine($"default:"); + using (writer.IncreaseIndent()) + { + writer.AppendLine($"{typeof(FSThrow).GGCTN()}.{nameof(FSThrow.InvalidOperation_InvalidUnionDiscriminator)}<{this.Name}>(disc);"); + writer.AppendLine("return default(TReturn);"); + } } } } @@ -205,7 +209,7 @@ private void WriteConstructor(CodeWriter writer, string resolvedType, EnumVal un writer.AppendLine("if (value is null)"); using (writer.WithBlock()) { - writer.AppendLine("throw new ArgumentNullException(nameof(value));"); + writer.AppendLine($"{typeof(FSThrow).GGCTN()}.{nameof(FSThrow.ArgumentNull)}(nameof(value));"); } }