@@ -16,13 +16,13 @@ public sealed partial class ValidationsGenerator : IIncrementalGenerator
1616 public static string GeneratedCodeConstructor => $@ "System.CodeDom.Compiler.GeneratedCodeAttribute(""{ typeof ( ValidationsGenerator ) . Assembly . FullName } "", ""{ typeof ( ValidationsGenerator ) . Assembly . GetName ( ) . Version } "")";
1717 public static string GeneratedCodeAttribute => $ "[{ GeneratedCodeConstructor } ]";
1818
19- internal static void Emit ( SourceProductionContext context , ( ( InterceptableLocation ? AddValidation , ImmutableArray < ValidatableType > Types ) First , ImmutableArray < ValidatableParameter > Parameters ) emitInputs )
19+ internal static void Emit ( SourceProductionContext context , ( InterceptableLocation ? AddValidation , ImmutableArray < ValidatableType > ValidatableTypes ) emitInputs )
2020 {
21- var source = Emit ( emitInputs . First . AddValidation , emitInputs . First . Types , emitInputs . Parameters ) ;
21+ var source = Emit ( emitInputs . AddValidation , emitInputs . ValidatableTypes ) ;
2222 context . AddSource ( "ValidatableInfoResolver.g.cs" , SourceText . From ( source , Encoding . UTF8 ) ) ;
2323 }
2424
25- private static string Emit ( InterceptableLocation ? addValidation , ImmutableArray < ValidatableType > validatableTypes , ImmutableArray < ValidatableParameter > validatableParameters ) => $$ """
25+ private static string Emit ( InterceptableLocation ? addValidation , ImmutableArray < ValidatableType > validatableTypes ) => $$ """
2626//------------------------------------------------------------------------------
2727// <auto-generated>
2828// This code was generated by a tool.
@@ -77,26 +77,6 @@ public GeneratedValidatablePropertyInfo(
7777 protected override ValidationAttribute[] GetValidationAttributes() => _validationAttributes;
7878 }
7979
80- {{ GeneratedCodeAttribute }}
81- file sealed class GeneratedValidatableParameterInfo : global::Microsoft.AspNetCore.Http.Validation.ValidatableParameterInfo
82- {
83- private readonly ValidationAttribute[] _validationAttributes;
84-
85- public GeneratedValidatableParameterInfo(
86- string name,
87- string displayName,
88- bool isNullable,
89- bool isRequired,
90- bool hasValidatableType,
91- bool isEnumerable,
92- ValidationAttribute[] validationAttributes) : base(name, displayName, isNullable, isRequired, hasValidatableType, isEnumerable)
93- {
94- _validationAttributes = validationAttributes;
95- }
96-
97- protected override ValidationAttribute[] GetValidationAttributes() => _validationAttributes;
98- }
99-
10080 {{ GeneratedCodeAttribute }}
10181 file sealed class GeneratedValidatableTypeInfo : global::Microsoft.AspNetCore.Http.Validation.ValidatableTypeInfo
10282 {
@@ -116,14 +96,13 @@ public GeneratedValidatableTypeInfo(
11696 return null;
11797 }
11898
99+ // No-ops, rely on runtime code for ParameterInfo-based resolution
119100 public ValidatableParameterInfo? GetValidatableParameterInfo(global::System.Reflection.ParameterInfo parameterInfo)
120101 {
121- {{ EmitParameterTypeChecks ( validatableParameters ) }}
122102 return null;
123103 }
124104
125105 {{ EmitCreateMethods ( validatableTypes ) }}
126- {{ EmitCreateParameterMethods ( validatableParameters ) }}
127106 }
128107
129108 {{ GeneratedCodeAttribute }}
@@ -296,71 +275,6 @@ private static string EmitTypeChecks(ImmutableArray<ValidatableType> validatable
296275 return sw . ToString ( ) ;
297276 }
298277
299- private static string EmitParameterTypeChecks ( ImmutableArray < ValidatableParameter > validatableParameters )
300- {
301- var sw = new StringWriter ( ) ;
302- var cw = new CodeWriter ( sw , baseIndent : 3 ) ;
303-
304- // Group parameters by name to handle potential duplicates
305- var parameterGroups = validatableParameters . GroupBy ( p => p . Name ) . ToList ( ) ;
306-
307- foreach ( var group in parameterGroups )
308- {
309- var name = group . Key ;
310- var parameters = group . ToList ( ) ;
311-
312- // If there's only one parameter with this name, use the simple check
313- if ( parameters . Count == 1 )
314- {
315- var param = parameters [ 0 ] ;
316- var parameterTypeName = param . Type . ToDisplayString ( ) ;
317- cw . WriteLine ( $ "if (parameterInfo.Name == \" { param . Name } \" && parameterInfo.ParameterType == typeof({ parameterTypeName } ))") ;
318- cw . StartBlock ( ) ;
319- cw . WriteLine ( $ "return CreateParameterInfo_{ SanitizeTypeName ( param . OriginalType . ToDisplayString ( SymbolDisplayFormat . CSharpShortErrorMessageFormat ) ) } _{ SanitizeTypeName ( param . Name ) } _{ param . Index } ();") ;
320- cw . EndBlock ( ) ;
321- }
322- else
323- {
324- // For parameters with the same name, we need additional checks to distinguish them
325- cw . WriteLine ( $ "if (parameterInfo.Name == \" { name } \" )") ;
326- cw . StartBlock ( ) ;
327-
328- // Check parameter type first as it's faster
329- for ( var i = 0 ; i < parameters . Count ; i ++ )
330- {
331- var param = parameters [ i ] ;
332- var parameterTypeName = param . Type . ToDisplayString ( ) ;
333-
334- // For first item, use 'if', for others use 'else if'
335- string ifStatement = i == 0 ? "if" : "else if" ;
336-
337- cw . WriteLine ( $ "{ ifStatement } (parameterInfo.ParameterType == typeof({ parameterTypeName } ))") ;
338- cw . StartBlock ( ) ;
339-
340- // Add position check if available
341- if ( param . Index >= 0 )
342- {
343- cw . WriteLine ( $ "if (parameterInfo.Position == { param . Index } )") ;
344- cw . StartBlock ( ) ;
345- }
346-
347- cw . WriteLine ( $ "return CreateParameterInfo_{ SanitizeTypeName ( param . OriginalType . ToDisplayString ( SymbolDisplayFormat . CSharpShortErrorMessageFormat ) ) } _{ SanitizeTypeName ( param . Name ) } _{ param . Index } ();") ;
348-
349- if ( param . Index >= 0 )
350- {
351- cw . EndBlock ( ) ;
352- }
353-
354- cw . EndBlock ( ) ;
355- }
356-
357- cw . EndBlock ( ) ;
358- }
359- }
360-
361- return sw . ToString ( ) ;
362- }
363-
364278 private static string EmitCreateMethods ( ImmutableArray < ValidatableType > validatableTypes )
365279 {
366280 var sw = new StringWriter ( ) ;
@@ -404,34 +318,6 @@ private static string EmitValidatableMemberForCreate(ValidatableProperty member)
404318""" ;
405319 }
406320
407- private static string EmitCreateParameterMethods ( ImmutableArray < ValidatableParameter > validatableParameters )
408- {
409- var sw = new StringWriter ( ) ;
410- var cw = new CodeWriter ( sw , baseIndent : 3 ) ;
411- foreach ( var validatableParameter in validatableParameters )
412- {
413- var parameterTypeName = validatableParameter . Type . ToDisplayString ( ) ;
414- cw . WriteLine ( $@ "private ValidatableParameterInfo CreateParameterInfo_{ SanitizeTypeName ( validatableParameter . OriginalType . ToDisplayString ( SymbolDisplayFormat . CSharpShortErrorMessageFormat ) ) } _{ SanitizeTypeName ( validatableParameter . Name ) } _{ validatableParameter . Index } ()") ;
415- cw . StartBlock ( ) ;
416- var validationAttributes = validatableParameter . Attributes . IsDefaultOrEmpty
417- ? "[]"
418- : $ "[{ string . Join ( ", " , validatableParameter . Attributes . Select ( EmitValidationAttributeForCreate ) ) } ]";
419- cw . WriteLine ( $ """
420- return new GeneratedValidatableParameterInfo(
421- name: "{ validatableParameter . Name } ",
422- displayName: "{ validatableParameter . DisplayName } ",
423- isRequired: { validatableParameter . IsRequired . ToString ( ) . ToLowerInvariant ( ) } ,
424- isNullable: { validatableParameter . IsNullable . ToString ( ) . ToLowerInvariant ( ) } ,
425- hasValidatableType: { validatableParameter . HasValidatableType . ToString ( ) . ToLowerInvariant ( ) } ,
426- isEnumerable: { validatableParameter . IsEnumerable . ToString ( ) . ToLowerInvariant ( ) } ,
427- validationAttributes: { validationAttributes }
428- );
429- """ ) ;
430- cw . EndBlock ( ) ;
431- }
432- return sw . ToString ( ) ;
433- }
434-
435321 private static string EmitValidationAttributeForCreate ( ValidationAttribute attr )
436322 {
437323 var args = attr . Arguments . Count > 0
0 commit comments