Skip to content

Commit bb64695

Browse files
authored
IList parameter should be IEnumerable for model factory (#53689)
* IList parameter should be IEnumerable for model factory * refine * refine * cleanup
1 parent 166f282 commit bb64695

File tree

2 files changed

+28
-21
lines changed

2 files changed

+28
-21
lines changed

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,21 +215,25 @@ private ValueExpression[] BuildConstructorParameters(CSharpType propertyType, Li
215215
fullConstructorParameterIndex++;
216216
}
217217
var (isOverriddenValueType, flattenedProperty) = flattenedProperties[flattenedPropertyIndex];
218-
var propertyParameter = flattenedProperty.AsParameter;
219218
var flattenedPropertyType = flattenedProperty.Type;
220219
var constructorParameterType = fullConstructorParameters[fullConstructorParameterIndex].Type;
221220

222221
// If the internal property type is the same as the property type, we can use the flattened property directly.
223222
if (constructorParameterType.AreNamesEqual(flattenedPropertyType))
224223
{
225-
if (parameterMap.TryGetValue(propertyParameter, out var updatedParameter))
226-
{
227-
parameters.Add(isOverriddenValueType ? updatedParameter.Property("Value") : updatedParameter);
228-
}
229-
else
230-
{
231-
parameters.Add(isOverriddenValueType ? propertyParameter.Property("Value") : propertyParameter);
232-
}
224+
var propertyParameter = flattenedProperty.AsParameter;
225+
var parameter = (parameterMap.TryGetValue(propertyParameter, out var updatedParameter)
226+
? updatedParameter
227+
: propertyParameter);
228+
229+
// TODO: Ideally we could just call parameter.ToPublicInputParameter() to build the input type parameter, which is not working properly
230+
// update the parameter type to match the constructor parameter type for now
231+
parameter.Update(type: parameter.Type.InputType);
232+
233+
parameters.Add(isOverriddenValueType
234+
? parameter.Property("Value")
235+
: IsNonReadOnlyMemoryList(parameter) ? parameter.ToList() : parameter);
236+
233237
// only increase flattenedPropertyIndex when we use a flattened property
234238
flattenedPropertyIndex++;
235239
}
@@ -268,6 +272,9 @@ int GetAdditionalPropertyIndex()
268272
}
269273
return additionalPropertyIndex;
270274
}
275+
276+
bool IsNonReadOnlyMemoryList(ParameterProvider parameter) =>
277+
parameter.Type is { IsList: true, IsReadOnlyMemory: false };
271278
}
272279

273280
// This dictionary holds the flattened model types, where the key is the CSharpType of the model and the value is a dictionary of property names to flattened PropertyProvider.

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

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)