@@ -20,6 +20,8 @@ public sealed partial class ValidationsGenerator : IIncrementalGenerator
20
20
globalNamespaceStyle : SymbolDisplayGlobalNamespaceStyle . Included ,
21
21
typeQualificationStyle : SymbolDisplayTypeQualificationStyle . NameAndContainingTypesAndNamespaces ) ;
22
22
23
+ private static INamedTypeSymbol ? _skipValidationAttribute ;
24
+
23
25
internal ImmutableArray < ValidatableType > ExtractValidatableTypes ( IInvocationOperation operation , WellKnownTypes wellKnownTypes )
24
26
{
25
27
AnalyzerDebug . Assert ( operation . SemanticModel != null , "SemanticModel should not be null." ) ;
@@ -43,6 +45,12 @@ internal ImmutableArray<ValidatableType> ExtractValidatableTypes(IInvocationOper
43
45
continue ;
44
46
}
45
47
48
+ // Skip parameter if it or its type are annotated with SkipValidationAttribute
49
+ if ( SymbolOrTypeHasAttribute ( parameter , parameter . Type , GetSkipValidationAttribute ( wellKnownTypes ) ) )
50
+ {
51
+ continue ;
52
+ }
53
+
46
54
_ = TryExtractValidatableType ( parameter . Type , wellKnownTypes , ref validatableTypes , ref visitedTypes ) ;
47
55
}
48
56
return [ .. validatableTypes ] ;
@@ -115,8 +123,6 @@ internal ImmutableArray<ValidatableProperty> ExtractValidatableMembers(ITypeSymb
115
123
WellKnownTypeData . WellKnownType . Microsoft_AspNetCore_Http_Metadata_IFromServiceMetadata ) ;
116
124
var fromKeyedServiceAttributeSymbol = wellKnownTypes . Get (
117
125
WellKnownTypeData . WellKnownType . Microsoft_Extensions_DependencyInjection_FromKeyedServicesAttribute ) ;
118
- var skipValidationAttributeSymbol = wellKnownTypes . Get (
119
- WellKnownTypeData . WellKnownType . Microsoft_Extensions_Validation_SkipValidationAttribute ) ;
120
126
121
127
// Special handling for record types to extract properties from
122
128
// the primary constructor.
@@ -152,7 +158,7 @@ internal ImmutableArray<ValidatableProperty> ExtractValidatableMembers(ITypeSymb
152
158
}
153
159
154
160
// Skip parameter if it or its type are annotated with SkipValidationAttribute
155
- if ( SymbolOrTypeHasAttribute ( parameter , parameter . Type , skipValidationAttributeSymbol ) )
161
+ if ( SymbolOrTypeHasAttribute ( parameter , parameter . Type , GetSkipValidationAttribute ( wellKnownTypes ) ) )
156
162
{
157
163
continue ;
158
164
}
@@ -196,7 +202,7 @@ internal ImmutableArray<ValidatableProperty> ExtractValidatableMembers(ITypeSymb
196
202
}
197
203
198
204
// Skip property if it or its type are annotated with SkipValidationAttribute
199
- if ( SymbolOrTypeHasAttribute ( member , member . Type , skipValidationAttributeSymbol ) )
205
+ if ( SymbolOrTypeHasAttribute ( member , member . Type , GetSkipValidationAttribute ( wellKnownTypes ) ) )
200
206
{
201
207
continue ;
202
208
}
@@ -244,6 +250,12 @@ internal static ImmutableArray<ValidationAttribute> ExtractValidationAttributes(
244
250
IsCustomValidationAttribute : SymbolEqualityComparer . Default . Equals ( attribute . AttributeClass , wellKnownTypes . Get ( WellKnownTypeData . WellKnownType . System_ComponentModel_DataAnnotations_CustomValidationAttribute ) ) ) ) ] ;
245
251
}
246
252
253
+ private static INamedTypeSymbol GetSkipValidationAttribute ( WellKnownTypes wellKnownTypes )
254
+ {
255
+ _skipValidationAttribute ??= wellKnownTypes . Get ( WellKnownTypeData . WellKnownType . Microsoft_Extensions_Validation_SkipValidationAttribute ) ;
256
+ return _skipValidationAttribute ;
257
+ }
258
+
247
259
private static bool SymbolOrTypeHasAttribute ( ISymbol symbol , ITypeSymbol typeSymbol , INamedTypeSymbol attributeSymbol )
248
260
{
249
261
return symbol . HasAttribute ( attributeSymbol )
0 commit comments