diff --git a/src/Microsoft.Health.Fhir.CodeGen/Language/Firely/CSharpFirely2.cs b/src/Microsoft.Health.Fhir.CodeGen/Language/Firely/CSharpFirely2.cs index 6ee04c601..01bea8370 100644 --- a/src/Microsoft.Health.Fhir.CodeGen/Language/Firely/CSharpFirely2.cs +++ b/src/Microsoft.Health.Fhir.CodeGen/Language/Firely/CSharpFirely2.cs @@ -1702,7 +1702,7 @@ void writeOneOnOneGetterAndSetter(string propertyType, string propertyName, bool _writer.WriteLineIndented($"{propertyType} {interfaceExportName}.{propertyName}"); OpenScope(); _writer.WriteLineIndented($"get => {propertyName};"); - _writer.WriteLineIndented($"set => {propertyName} = value;"); + _writer.WriteLineIndented($"set => {propertyName} = value!;"); CloseScope(); } @@ -1986,9 +1986,9 @@ private void WriteComponent( if (identifierElement != null) { if (identifierElement.cgIsArray()) - _writer.WriteLineIndented("List IIdentifiable>.Identifier { get => Identifier; set => Identifier = value; }"); + _writer.WriteLineIndented("List IIdentifiable>.Identifier { get => Identifier; set => Identifier = value!; }"); else - _writer.WriteLineIndented("Identifier? IIdentifiable.Identifier { get => Identifier; set => Identifier = value; }"); + _writer.WriteLineIndented("Identifier? IIdentifiable.Identifier { get => Identifier; set => Identifier = value!; }"); _writer.WriteLine(string.Empty); } @@ -2210,10 +2210,10 @@ private void WriteDictionaryTrySetValue(string exportName, List 0 ); } @@ -3103,9 +3104,9 @@ private void WriteElementGettersAndSetters(ElementDefinition element, WrittenEle { } s => s }; - if(ei.PropertyType is ListTypeReference) + if (ei.PropertyType is ListTypeReference) _writer.WriteLineIndented("[AllowNull]"); - _writer.WriteLineIndented($"public {(ei.PropertyType is ListTypeReference ltr ? ltr.PropertyTypeString : $"{ei.PropertyType.PropertyTypeString}?")} {ei.PropertyName}"); + _writer.WriteLineIndented($"public {(ei.PropertyType is ListTypeReference || ei.Required ? ei.PropertyType.PropertyTypeString : $"{ei.PropertyType.PropertyTypeString}?")} {ei.PropertyName}"); OpenScope(); @@ -3115,7 +3116,7 @@ private void WriteElementGettersAndSetters(ElementDefinition element, WrittenEle _writer.IncreaseIndent(); _writer.WriteLineIndented($"throw CodedValidationException.FromTypes(typeof({ei.PropertyType.PropertyTypeString}), Overflow[\"{ei.FhirElementName}\"]);"); _writer.DecreaseIndent(); - _writer.WriteLineIndented(ei.PropertyType is not ListTypeReference ? $"return _{ei.PropertyName};" : $"return _{ei.PropertyName} ??= [];"); + _writer.WriteLineIndented(ei.PropertyType is not ListTypeReference ? $"return _{ei.PropertyName}{(ei.Required ? "!" : "")};" : $"return _{ei.PropertyName} ??= [];"); CloseScope(); @@ -3178,8 +3179,8 @@ private void WritePrimitiveHelperProperty(string description, WrittenElementInfo switch (propType) { case PrimitiveTypeReference ptr: - string nullableType = WithNullabilityMarking(ptr.ConveniencePropertyTypeString); - _writer.WriteLineIndented($"public {nullableType} {helperPropName}"); + string typeString = WithNullabilityMarking(ptr.ConveniencePropertyTypeString); + _writer.WriteLineIndented($"public {typeString} {helperPropName}"); OpenScope(); string propAccess = versionsRemark is not null @@ -3189,7 +3190,7 @@ private void WritePrimitiveHelperProperty(string description, WrittenElementInfo _writer.WriteLineIndented("set"); OpenScope(); - _writer.WriteLineIndented($"{ei.PropertyName} = value is null ? null : new {ptr.PropertyTypeString}(value);"); + _writer.WriteLineIndented($"{ei.PropertyName} = value is null ? null! : new {ptr.PropertyTypeString}(value);"); _writer.WriteLineIndented($"OnPropertyChanged(\"{helperPropName}\");"); CloseScope(suppressNewline: true); CloseScope(); @@ -3801,7 +3802,8 @@ internal record WrittenElementInfo( string FhirElementPath, string PropertyName, TypeReference PropertyType, - string? PrimitiveHelperName); + string? PrimitiveHelperName, + bool Required = false); /// Information about the written model. internal record WrittenModelInfo(string FhirName, string CsName, bool IsAbstract);