Skip to content

Commit f3bfd5e

Browse files
authored
Refine constructor parameters and IEnumerable implementation for ResourceCollection (#53635)
* wip * refine when to skip IEnumerable implementation * refine * regen * rename * convert parameter type for fields
1 parent 6cf490a commit f3bfd5e

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Providers/ResourceCollectionClientProvider.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ internal sealed class ResourceCollectionClientProvider : TypeProvider
3737
// Cached Get method providers
3838
private MethodProvider? _getAsyncMethodProvider;
3939
private MethodProvider? _getSyncMethodProvider;
40+
private MethodProvider? _getAllSyncMethodProvider;
4041

4142
// Support for multiple rest clients
4243
private readonly Dictionary<InputClient, RestClientInfo> _clientInfos;
@@ -52,14 +53,15 @@ internal ResourceCollectionClientProvider(ResourceClientProvider resource, Input
5253
_contextualPath = GetContextualRequestPattern(resourceMetadata);
5354
_resource = resource;
5455

55-
_pathParameterMap = BuildPathParameterMap();
56-
5756
// Initialize client info dictionary using extension method
5857
_clientInfos = resourceMetadata.CreateClientInfosMap(this);
5958

6059
_resourceTypeExpression = Static(_resource.Type).As<ArmResource>().ResourceType();
6160

6261
InitializeMethods(resourceMethods, ref _get, ref _create, ref _getAll);
62+
63+
// this depends on _getAll being initialized
64+
_pathParameterMap = BuildPathParameterMap();
6365
}
6466

6567
/// <summary>
@@ -147,7 +149,7 @@ protected override CSharpType[] BuildImplements() =>
147149

148150
private bool ShouldSkipIEnumerableImplementation()
149151
{
150-
return _getAll is null || _getAll.InputMethod.Parameters.Any(p => p.DefaultValue != null);
152+
return _getAllSyncMethodProvider is null || _getAllSyncMethodProvider.Signature.Parameters.Any(p => p.DefaultValue is null);
151153
}
152154

153155
protected override PropertyProvider[] BuildProperties()
@@ -172,12 +174,14 @@ protected override PropertyProvider[] BuildProperties()
172174
private Dictionary<ParameterProvider, FieldProvider> BuildPathParameterMap()
173175
{
174176
var map = new Dictionary<ParameterProvider, FieldProvider>();
175-
var diff = ContextualPath.TrimAncestorFrom(Resource.ContextualPath);
176-
var variableSegments = diff.Where(seg => !seg.IsConstant).ToList();
177-
if (variableSegments.Count > 0)
177+
if (_getAll is null)
178178
{
179-
variableSegments.RemoveAt(variableSegments.Count - 1);
179+
return map;
180180
}
181+
182+
var diff = ContextualPath.TrimAncestorFrom(new RequestPathPattern(_getAll.OperationPath));
183+
var variableSegments = diff.Where(seg => !seg.IsConstant).ToList();
184+
181185
foreach (var seg in variableSegments)
182186
{
183187
var parameter = new ParameterProvider(
@@ -295,10 +299,10 @@ private MethodProvider[] BuildGetAllMethods()
295299
}
296300

297301
// implement paging method GetAll
298-
var getAll = BuildGetAllMethod(_getAll, false);
302+
_getAllSyncMethodProvider = BuildGetAllMethod(_getAll, false);
299303
var getAllAsync = BuildGetAllMethod(_getAll, true);
300304

301-
return [getAllAsync, getAll];
305+
return [getAllAsync, _getAllSyncMethodProvider];
302306
}
303307

304308
private MethodProvider[] BuildEnumeratorMethods()

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Utilities/RequestPathPatternExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public static IReadOnlyList<ValueExpression> PopulateArguments(
3838
//Find matching parameter from pathFieldsParameters if enclosing type is ResourceCollectionClientProvider
3939
else if (enclosingType is ResourceCollectionClientProvider collectionProvider && collectionProvider.TryGetPrivateFieldParameter(parameter, out var matchingField) && matchingField != null)
4040
{
41-
arguments.Add(matchingField);
41+
arguments.Add(Convert(matchingField, matchingField.Type, parameter.Type));
4242
}
4343
else if (parameter.Type.Equals(typeof(RequestContent)))
4444
{

0 commit comments

Comments
 (0)