Skip to content

Commit c757d75

Browse files
authored
model factory parameter should always be set with default (Azure#52845)
1 parent 1f64172 commit c757d75

File tree

2 files changed

+11
-23
lines changed

2 files changed

+11
-23
lines changed

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Visitors/FlattenPropertyVisitor.cs

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ private void UpdateModelFactoryMethod(MethodProvider method, CSharpType returnTy
6060
var parameterMap = new Dictionary<ParameterProvider, ParameterProvider>();
6161
var updatedParameters = new List<ParameterProvider>(method.Signature.Parameters.Count);
6262
var updated = false;
63-
var parameterShouldBeNullable = false; // if the previous method parameter is nullable, we need to ensure that the current parameter is also set with default value
6463
foreach (var parameter in method.Signature.Parameters)
6564
{
6665
if (propertyNameMap.TryGetValue(parameter.Name, out var value))
@@ -70,35 +69,24 @@ private void UpdateModelFactoryMethod(MethodProvider method, CSharpType returnTy
7069
{
7170
// If the flattened property is a value type, we need to ensure that we handle the nullability correctly.
7271
var propertyParameter = flattenedProperty.AsParameter;
73-
if (parameterShouldBeNullable || flattenedProperty.Type.IsNullable)
74-
{
75-
// The same parameter is used in public constructor, we need a new copy for model factory method with different nullability.
76-
var updatedParameter = new ParameterProvider(propertyParameter.Name, propertyParameter.Description, propertyParameter.Type, propertyParameter.DefaultValue,
77-
propertyParameter.IsRef, propertyParameter.IsOut, propertyParameter.IsParams, propertyParameter.Attributes, propertyParameter.Property,
78-
propertyParameter.Field, propertyParameter.InitializationValue, propertyParameter.Location, propertyParameter.WireInfo, propertyParameter.Validation);
7972

80-
if (isOverriddenValueType)
81-
{
82-
updatedParameter.Update(type: updatedParameter.Type.WithNullable(true));
83-
}
84-
parameterShouldBeNullable = true;
85-
updatedParameter.DefaultValue = Default; // Ensure that the default value is set to null for nullable types
73+
// The same parameter is used in public constructor, we need a new copy for model factory method with different nullability.
74+
var updatedParameter = new ParameterProvider(propertyParameter.Name, propertyParameter.Description, propertyParameter.Type, propertyParameter.DefaultValue,
75+
propertyParameter.IsRef, propertyParameter.IsOut, propertyParameter.IsParams, propertyParameter.Attributes, propertyParameter.Property,
76+
propertyParameter.Field, propertyParameter.InitializationValue, propertyParameter.Location, propertyParameter.WireInfo, propertyParameter.Validation);
8677

87-
parameterMap.Add(propertyParameter, updatedParameter);
88-
updatedParameters.Add(updatedParameter);
89-
}
90-
else
78+
if (isOverriddenValueType)
9179
{
92-
updatedParameters.Add(propertyParameter);
80+
updatedParameter.Update(type: updatedParameter.Type.WithNullable(true));
9381
}
82+
updatedParameter.DefaultValue = Default; // Ensure that the default value is set to null for nullable types
83+
84+
parameterMap.Add(propertyParameter, updatedParameter);
85+
updatedParameters.Add(updatedParameter);
9486
}
9587
}
9688
else
9789
{
98-
if (parameter.Type.IsNullable)
99-
{
100-
parameterShouldBeNullable = true;
101-
}
10290
updatedParameters.Add(parameter);
10391
}
10492
}

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/MgmtTypeSpecModelFactory.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)