Skip to content

Commit

Permalink
Scope attribute accessability to the validator type
Browse files Browse the repository at this point in the history
  • Loading branch information
tarekgh committed Jul 10, 2023
1 parent cce26ff commit c59cb6a
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions src/libraries/Microsoft.Extensions.Options/gen/Parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public IReadOnlyList<ValidatorType> GetValidatorTypes(IEnumerable<(TypeDeclarati
? modelType.GetLocation()
: syntax.GetLocation();

var membersToValidate = GetMembersToValidate(modelType, true, lowerLocationInCompilation);
var membersToValidate = GetMembersToValidate(modelType, true, lowerLocationInCompilation, validatorType);
if (membersToValidate.Count == 0)
{
// this type lacks any eligible members
Expand Down Expand Up @@ -243,7 +243,7 @@ private static bool HasOpenGenerics(ITypeSymbol type, out string genericType)
return null;
}

private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool speculate, Location lowerLocationInCompilation)
private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool speculate, Location lowerLocationInCompilation, ITypeSymbol validatorType)
{
// make a list of the most derived members in the model type

Expand Down Expand Up @@ -271,7 +271,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
? member.GetLocation()
: lowerLocationInCompilation;

var memberInfo = GetMemberInfo(member, speculate, location);
var memberInfo = GetMemberInfo(member, speculate, location, validatorType);
if (memberInfo is not null)
{
if (member.DeclaredAccessibility != Accessibility.Public && member.DeclaredAccessibility != Accessibility.Internal)
Expand All @@ -287,7 +287,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
return membersToValidate;
}

private ValidatedMember? GetMemberInfo(ISymbol member, bool speculate, Location location)
private ValidatedMember? GetMemberInfo(ISymbol member, bool speculate, Location location, ITypeSymbol validatorType)
{
ITypeSymbol memberType;
switch (member)
Expand Down Expand Up @@ -370,7 +370,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
if (transValidatorTypeName == null)
{
transValidatorIsSynthetic = true;
transValidatorTypeName = AddSynthesizedValidator(memberType, member, location);
transValidatorTypeName = AddSynthesizedValidator(memberType, member, location, validatorType);
}

// pop the stack
Expand Down Expand Up @@ -433,14 +433,14 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
if (enumerationValidatorTypeName == null)
{
enumerationValidatorIsSynthetic = true;
enumerationValidatorTypeName = AddSynthesizedValidator(enumeratedType, member, location);
enumerationValidatorTypeName = AddSynthesizedValidator(enumeratedType, member, location, validatorType);
}

// pop the stack
_ = _visitedModelTypes.Remove(enumeratedType.WithNullableAnnotation(NullableAnnotation.None));
}
else if (ConvertTo(attributeType, _symbolHolder.ValidationAttributeSymbol) &&
_compilation.IsSymbolAccessibleWithin(attributeType, _compilation.Assembly))
_compilation.IsSymbolAccessibleWithin(attributeType, validatorType))
{
var validationAttr = new ValidationAttributeInfo(attributeType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat));
validationAttrs.Add(validationAttr);
Expand Down Expand Up @@ -476,7 +476,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
{
if (!HasOpenGenerics(memberType, out var genericType))
{
var membersToValidate = GetMembersToValidate(memberType, false, location);
var membersToValidate = GetMembersToValidate(memberType, false, location, validatorType);
if (membersToValidate.Count > 0)
{
Diag(DiagDescriptors.PotentiallyMissingTransitiveValidation, location, memberType.Name, member.Name);
Expand All @@ -492,7 +492,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
{
if (!HasOpenGenerics(enumeratedType, out var genericType))
{
var membersToValidate = GetMembersToValidate(enumeratedType, false, location);
var membersToValidate = GetMembersToValidate(enumeratedType, false, location, validatorType);
if (membersToValidate.Count > 0)
{
Diag(DiagDescriptors.PotentiallyMissingEnumerableValidation, location, enumeratedType.Name, member.Name);
Expand Down Expand Up @@ -520,7 +520,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
return null;
}

private string? AddSynthesizedValidator(ITypeSymbol modelType, ISymbol member, Location location)
private string? AddSynthesizedValidator(ITypeSymbol modelType, ISymbol member, Location location, ITypeSymbol validatorType)
{
var mt = modelType.WithNullableAnnotation(NullableAnnotation.None);
if (mt.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T)
Expand All @@ -534,7 +534,7 @@ private List<ValidatedMember> GetMembersToValidate(ITypeSymbol modelType, bool s
return "global::" + validator.Namespace + "." + validator.Name;
}

var membersToValidate = GetMembersToValidate(mt, true, location);
var membersToValidate = GetMembersToValidate(mt, true, location, validatorType);
if (membersToValidate.Count == 0)
{
// this type lacks any eligible members
Expand Down

0 comments on commit c59cb6a

Please sign in to comment.