Skip to content

Commit 3c6fc94

Browse files
authored
Update warning suppressions and cache ParameterInfo[] in generated code (#56979)
1 parent 60b705d commit 3c6fc94

File tree

35 files changed

+152
-83
lines changed

35 files changed

+152
-83
lines changed

src/Http/Http.Extensions/gen/StaticRouteHandlerModel/StaticRouteHandlerModel.Emitter.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ public static void EmitAcceptsMetadata(this Endpoint endpoint, CodeWriter codeWr
366366

367367
public static void EmitParameterBindingMetadata(this Endpoint endpoint, CodeWriter codeWriter)
368368
{
369+
var emitParametersLocal = true;
369370
foreach (var parameter in endpoint.Parameters)
370371
{
371372
endpoint.EmitterContext.RequiresParameterBindingMetadataClass = true;
@@ -378,14 +379,19 @@ public static void EmitParameterBindingMetadata(this Endpoint endpoint, CodeWrit
378379
}
379380
else
380381
{
382+
if (emitParametersLocal)
383+
{
384+
codeWriter.WriteLine("var parameters = methodInfo.GetParameters();");
385+
emitParametersLocal = false;
386+
}
381387
EmitParameterBindingMetadataForParameter(parameter, codeWriter);
382388
}
383389
}
384390

385391
static void EmitParameterBindingMetadataForParameter(EndpointParameter parameter, CodeWriter codeWriter)
386392
{
387393
var parameterName = SymbolDisplay.FormatLiteral(parameter.SymbolName, true);
388-
var parameterInfo = parameter.IsProperty ? parameter.PropertyAsParameterInfoConstruction : $"methodInfo.GetParameters()[{parameter.Ordinal}]";
394+
var parameterInfo = parameter.IsProperty ? parameter.PropertyAsParameterInfoConstruction : $"parameters[{parameter.Ordinal}]";
389395
var hasTryParse = parameter.IsParsable ? "true" : "false";
390396
var hasBindAsync = parameter.Source == EndpointParameterSource.BindAsync ? "true" : "false";
391397
var isOptional = parameter.IsOptional ? "true" : "false";

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_BindAsync_NullableReturn.generated.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ namespace Microsoft.AspNetCore.Http.Generated
7070
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7171
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7272
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
73-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("param", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: true, isOptional: false));
73+
var parameters = methodInfo.GetParameters();
74+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("param", parameters[0], hasTryParse: false, hasBindAsync: true, isOptional: false));
7475
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));
7576
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7677
};
@@ -181,7 +182,8 @@ namespace Microsoft.AspNetCore.Http.Generated
181182
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
182183
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
183184
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
184-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("param", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: true, isOptional: false));
185+
var parameters = methodInfo.GetParameters();
186+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("param", parameters[0], hasTryParse: false, hasBindAsync: true, isOptional: false));
185187
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));
186188
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
187189
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_BindAsync_Snapshot.generated.txt

Lines changed: 50 additions & 30 deletions
Large diffs are not rendered by default.

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitBodyParam_ComplexReturn_Snapshot.generated.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ namespace Microsoft.AspNetCore.Http.Generated
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
7272
options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(type: typeof(global::Microsoft.AspNetCore.Http.Generators.Tests.Todo), isOptional: false, contentTypes: GeneratedMetadataConstants.JsonContentType));
73-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("todo", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
73+
var parameters = methodInfo.GetParameters();
74+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("todo", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
7475
PopulateMetadataForEndpoint<global::Microsoft.AspNetCore.Http.HttpResults.Ok<global::Microsoft.AspNetCore.Http.Generators.Tests.Todo>>(methodInfo, options.EndpointBuilder);
7576
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7677
};
@@ -177,7 +178,8 @@ namespace Microsoft.AspNetCore.Http.Generated
177178
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
178179
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
179180
options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(type: typeof(global::Microsoft.AspNetCore.Http.Generators.Tests.Todo), isOptional: true, contentTypes: GeneratedMetadataConstants.JsonContentType));
180-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("todo", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: true));
181+
var parameters = methodInfo.GetParameters();
182+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("todo", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: true));
181183
PopulateMetadataForEndpoint<global::Microsoft.AspNetCore.Http.HttpResults.Ok<global::Microsoft.AspNetCore.Http.Generators.Tests.Todo>>(methodInfo, options.EndpointBuilder);
182184
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
183185
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitHeader_ComplexTypeArrayParam.generated.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", methodInfo.GetParameters()[0], hasTryParse: true, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", parameters[0], hasTryParse: true, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(global::System.Int32), contentTypes: GeneratedMetadataConstants.JsonContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitHeader_NullableStringArrayParam.generated.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(global::System.Int32), contentTypes: GeneratedMetadataConstants.JsonContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitHeader_StringArrayParam.generated.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(global::System.Int32), contentTypes: GeneratedMetadataConstants.JsonContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitQuery_ComplexTypeArrayParam.generated.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", methodInfo.GetParameters()[0], hasTryParse: true, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", parameters[0], hasTryParse: true, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(global::System.Int32), contentTypes: GeneratedMetadataConstants.JsonContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitQuery_NullableStringArrayParam.generated.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(global::System.Int32), contentTypes: GeneratedMetadataConstants.JsonContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitQuery_StringArrayParam.generated.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("p", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(global::System.Int32), contentTypes: GeneratedMetadataConstants.JsonContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};

src/Http/Http.Extensions/test/RequestDelegateGenerator/Baselines/MapAction_ExplicitServiceParam_SimpleReturn_Snapshot.generated.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ namespace Microsoft.AspNetCore.Http.Generated
6969
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
7070
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
7171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
72-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svc", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
72+
var parameters = methodInfo.GetParameters();
73+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svc", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
7374
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));
7475
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
7576
};
@@ -168,7 +169,8 @@ namespace Microsoft.AspNetCore.Http.Generated
168169
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
169170
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
170171
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
171-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svc", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
172+
var parameters = methodInfo.GetParameters();
173+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svc", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: false));
172174
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));
173175
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
174176
};
@@ -267,8 +269,9 @@ namespace Microsoft.AspNetCore.Http.Generated
267269
Debug.Assert(options != null, "RequestDelegateFactoryOptions not found.");
268270
Debug.Assert(options.EndpointBuilder != null, "EndpointBuilder not found.");
269271
options.EndpointBuilder.Metadata.Add(new System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.Http.RequestDelegateGenerator, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42"));
270-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svc", methodInfo.GetParameters()[0], hasTryParse: false, hasBindAsync: false, isOptional: true));
271-
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svcs", methodInfo.GetParameters()[1], hasTryParse: false, hasBindAsync: false, isOptional: false));
272+
var parameters = methodInfo.GetParameters();
273+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svc", parameters[0], hasTryParse: false, hasBindAsync: false, isOptional: true));
274+
options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata("svcs", parameters[1], hasTryParse: false, hasBindAsync: false, isOptional: false));
272275
options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));
273276
return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };
274277
};

0 commit comments

Comments
 (0)