Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,21 @@ private IEnumerable<MethodBodyStatement> GetStackVariablesForProtocolParamConver

private List<ValueExpression> GetSpreadConversion(TypeProvider spreadSource)
{
var convenienceMethodParams = ConvenienceMethodParameters.ToDictionary(p => p.Name);
// Match convenience method parameters to constructor parameters by wire (serialized) name
// to handle cases where C# names diverge due to @clientName renames, @encodedName,
// or casing differences between the convenience parameters and model properties.
// Falls back to C# name matching for parameters without wire information.
var convenienceMethodParamsByWireName = new Dictionary<string, ParameterProvider>(StringComparer.OrdinalIgnoreCase);
var convenienceMethodParamsByName = new Dictionary<string, ParameterProvider>(StringComparer.OrdinalIgnoreCase);
foreach (var p in ConvenienceMethodParameters)
{
if (p.WireInfo?.SerializedName != null)
{
convenienceMethodParamsByWireName.TryAdd(p.WireInfo.SerializedName, p);
}
convenienceMethodParamsByName.TryAdd(p.Name, p);
}

List<ValueExpression> expressions = new(spreadSource.Properties.Count);
// we should make this find more deterministic
var ctor = spreadSource.CanonicalView.Constructors.First(c =>
Expand All @@ -287,7 +301,13 @@ private List<ValueExpression> GetSpreadConversion(TypeProvider spreadSource)

foreach (var param in ctor.Signature.Parameters)
{
if (convenienceMethodParams.TryGetValue(param.Name, out var convenienceParam))
var wireName = param.Property?.WireInfo?.SerializedName;
if (!(wireName != null && convenienceMethodParamsByWireName.TryGetValue(wireName, out var convenienceParam)))
{
convenienceMethodParamsByName.TryGetValue(param.Name, out convenienceParam);
}

if (convenienceParam != null)
{
if (convenienceParam.Type.IsList)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -719,7 +719,7 @@ public virtual ClientResult<Thing> AnonymousBody(string name, BinaryData require
Argument.AssertNotNullOrEmpty(propertyWithSpecialDocs, nameof(propertyWithSpecialDocs));

Thing spreadModel = new Thing(
default,
name,
requiredUnion,
"accept",
requiredNullableString,
Expand Down Expand Up @@ -770,7 +770,7 @@ public virtual async Task<ClientResult<Thing>> AnonymousBodyAsync(string name, B
Argument.AssertNotNullOrEmpty(propertyWithSpecialDocs, nameof(propertyWithSpecialDocs));

Thing spreadModel = new Thing(
default,
name,
requiredUnion,
"accept",
requiredNullableString,
Expand Down
Loading