Skip to content

Commit 8df4955

Browse files
Replace use of DAMT.All in ComponentModel with a more restricted set (#114126)
1 parent 6a32ee4 commit 8df4955

19 files changed

+527
-92
lines changed

src/libraries/System.ComponentModel.Annotations/ref/System.ComponentModel.Annotations.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ public AllowedValuesAttribute(params object?[] values) { }
1717
public partial class AssociatedMetadataTypeTypeDescriptionProvider : System.ComponentModel.TypeDescriptionProvider
1818
{
1919
public AssociatedMetadataTypeTypeDescriptionProvider(System.Type type) { }
20-
public AssociatedMetadataTypeTypeDescriptionProvider(System.Type type, [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)] System.Type associatedMetadataType) { }
21-
public override System.ComponentModel.ICustomTypeDescriptor GetTypeDescriptor([System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)] System.Type objectType, object? instance) { throw null; }
20+
public AssociatedMetadataTypeTypeDescriptionProvider(System.Type type, [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)] System.Type associatedMetadataType) { }
21+
public override System.ComponentModel.ICustomTypeDescriptor GetTypeDescriptor([System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)] System.Type objectType, object? instance) { throw null; }
2222
}
2323
[System.AttributeUsageAttribute(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
2424
[System.ObsoleteAttribute("AssociationAttribute has been deprecated and is not supported.")]
@@ -229,8 +229,8 @@ public MaxLengthAttribute(int length) { }
229229
[System.AttributeUsageAttribute(System.AttributeTargets.Class, AllowMultiple=false)]
230230
public sealed partial class MetadataTypeAttribute : System.Attribute
231231
{
232-
public MetadataTypeAttribute([System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)] System.Type metadataClassType) { }
233-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
232+
public MetadataTypeAttribute([System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)] System.Type metadataClassType) { }
233+
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)]
234234
public System.Type MetadataClassType { get { throw null; } }
235235
}
236236
[System.AttributeUsageAttribute(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false)]
@@ -254,13 +254,13 @@ public partial class RangeAttribute : System.ComponentModel.DataAnnotations.Vali
254254
public RangeAttribute(double minimum, double maximum) { }
255255
public RangeAttribute(int minimum, int maximum) { }
256256
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Generic TypeConverters may require the generic types to be annotated. For example, NullableConverter requires the underlying type to be DynamicallyAccessedMembers All.")]
257-
public RangeAttribute([System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)] System.Type type, string minimum, string maximum) { }
257+
public RangeAttribute([System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)] System.Type type, string minimum, string maximum) { }
258258
public bool ConvertValueInInvariantCulture { get { throw null; } set { } }
259259
public object Maximum { get { throw null; } }
260260
public bool MaximumIsExclusive { get { throw null; } set { } }
261261
public object Minimum { get { throw null; } }
262262
public bool MinimumIsExclusive { get { throw null; } set { } }
263-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
263+
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.AllProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)]
264264
public System.Type OperandType { get { throw null; } }
265265
public bool ParseLimitsInInvariantCulture { get { throw null; } set { } }
266266
public override string FormatErrorMessage(string name) { throw null; }

src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/AssociatedMetadataTypeTypeDescriptionProvider.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,16 @@ namespace System.ComponentModel.DataAnnotations
1111
/// </summary>
1212
public class AssociatedMetadataTypeTypeDescriptionProvider : TypeDescriptionProvider
1313
{
14-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
14+
internal const DynamicallyAccessedMemberTypes AllMembersAndInterfaces =
15+
DynamicallyAccessedMemberTypes.AllConstructors |
16+
DynamicallyAccessedMemberTypes.AllEvents |
17+
DynamicallyAccessedMemberTypes.AllFields |
18+
DynamicallyAccessedMemberTypes.AllMethods |
19+
DynamicallyAccessedMemberTypes.AllNestedTypes |
20+
DynamicallyAccessedMemberTypes.AllProperties |
21+
DynamicallyAccessedMemberTypes.Interfaces;
22+
23+
[DynamicallyAccessedMembers(AllMembersAndInterfaces)]
1524
private readonly Type? _associatedMetadataType;
1625

1726
/// <summary>
@@ -33,7 +42,7 @@ public AssociatedMetadataTypeTypeDescriptionProvider(Type type)
3342
/// <exception cref="System.ArgumentNullException">The value of associatedMetadataType is null.</exception>
3443
public AssociatedMetadataTypeTypeDescriptionProvider(
3544
Type type,
36-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type associatedMetadataType)
45+
[DynamicallyAccessedMembers(AllMembersAndInterfaces)] Type associatedMetadataType)
3746
: this(type)
3847
{
3948
ArgumentNullException.ThrowIfNull(associatedMetadataType);
@@ -47,7 +56,7 @@ public AssociatedMetadataTypeTypeDescriptionProvider(
4756
/// <param name="objectType">The type of object to retrieve the type descriptor for.</param>
4857
/// <param name="instance">An instance of the type.</param>
4958
/// <returns>The descriptor that provides metadata for the type.</returns>
50-
public override ICustomTypeDescriptor GetTypeDescriptor([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type objectType, object? instance)
59+
public override ICustomTypeDescriptor GetTypeDescriptor([DynamicallyAccessedMembers(AllMembersAndInterfaces)] Type objectType, object? instance)
5160
{
5261
ICustomTypeDescriptor? baseDescriptor = base.GetTypeDescriptor(objectType, instance);
5362
return new AssociatedMetadataTypeTypeDescriptor(baseDescriptor, objectType, _associatedMetadataType);

src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/AssociatedMetadataTypeTypeDescriptor.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ namespace System.ComponentModel.DataAnnotations
1111
{
1212
internal sealed class AssociatedMetadataTypeTypeDescriptor : CustomTypeDescriptor
1313
{
14-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
14+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)]
1515
private Type? AssociatedMetadataType { get; set; }
1616

1717
private bool IsSelfAssociated { get; set; }
1818

1919
public AssociatedMetadataTypeTypeDescriptor(
2020
ICustomTypeDescriptor? parent,
2121
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] Type type,
22-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? associatedMetadataType)
22+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)] Type? associatedMetadataType)
2323
: base(parent)
2424
{
2525
AssociatedMetadataType = associatedMetadataType ?? TypeDescriptorCache.GetAssociatedMetadataType(type);
@@ -113,7 +113,7 @@ public static void ValidateMetadataType(
113113
}
114114
}
115115

116-
[return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
116+
[return: DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)]
117117
public static Type? GetAssociatedMetadataType(Type type)
118118
{
119119
if (TryGetAssociatedMetadataTypeFromCache(type, out Type? associatedMetadataType))
@@ -135,7 +135,7 @@ public static void ValidateMetadataType(
135135
"have annotation All (since we only ever add attribute.MetadataClassType which has All)." +
136136
"But the call to TryGetValue doesn't carry the annotation so this warns when trying" +
137137
"to assign to the out parameter.")]
138-
static bool TryGetAssociatedMetadataTypeFromCache(Type type, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] out Type? associatedMetadataType)
138+
static bool TryGetAssociatedMetadataTypeFromCache(Type type, [DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)] out Type? associatedMetadataType)
139139
{
140140
return s_metadataTypeCache.TryGetValue(type, out associatedMetadataType);
141141
}
@@ -166,7 +166,7 @@ private static void CheckAssociatedMetadataType(
166166
}
167167

168168
public static Attribute[] GetAssociatedMetadata(
169-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type,
169+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)] Type type,
170170
string memberName)
171171
{
172172
(Type, string) memberTuple = (type, memberName);

src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/MetadataTypeAttribute.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace System.ComponentModel.DataAnnotations
1212
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
1313
public sealed class MetadataTypeAttribute : Attribute
1414
{
15-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
15+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)]
1616
private readonly Type _metadataClassType;
1717

1818
/// <summary>
@@ -21,15 +21,15 @@ public sealed class MetadataTypeAttribute : Attribute
2121
/// </summary>
2222
/// <param name="metadataClassType">The metadata class to reference.</param>
2323
/// <exception cref="System.ArgumentNullException">metadataClassType is null.</exception>
24-
public MetadataTypeAttribute([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type metadataClassType)
24+
public MetadataTypeAttribute([DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)] Type metadataClassType)
2525
{
2626
_metadataClassType = metadataClassType;
2727
}
2828

2929
/// <summary>
3030
/// Gets the metadata class that is associated with a data-model partial class.
3131
/// </summary>
32-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
32+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)]
3333
public Type MetadataClassType
3434
{
3535
get

src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/RangeAttribute.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public RangeAttribute(double minimum, double maximum)
5050
/// <param name="maximum">The maximum allowable value.</param>
5151
[RequiresUnreferencedCode("Generic TypeConverters may require the generic types to be annotated. For example, NullableConverter requires the underlying type to be DynamicallyAccessedMembers All.")]
5252
public RangeAttribute(
53-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type,
53+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)] Type type,
5454
string minimum,
5555
string maximum)
5656
: base(populateErrorMessageResourceAccessor: false)
@@ -85,7 +85,7 @@ public RangeAttribute(
8585
/// Gets the type of the <see cref="Minimum" /> and <see cref="Maximum" /> values (e.g. Int32, Double, or some custom
8686
/// type)
8787
/// </summary>
88-
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
88+
[DynamicallyAccessedMembers(AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces)]
8989
public Type OperandType { get; }
9090

9191
/// <summary>

src/libraries/System.ComponentModel.Annotations/src/System/ComponentModel/DataAnnotations/ValidationAttributeStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ internal StoreItem(AttributeCollection attributes)
163163
/// </summary>
164164
private sealed class TypeStoreItem : StoreItem
165165
{
166-
internal const DynamicallyAccessedMemberTypes DynamicallyAccessedTypes = DynamicallyAccessedMemberTypes.All;
166+
internal const DynamicallyAccessedMemberTypes DynamicallyAccessedTypes = AssociatedMetadataTypeTypeDescriptionProvider.AllMembersAndInterfaces;
167167

168168
private readonly object _syncRoot = new object();
169169
[DynamicallyAccessedMembers(DynamicallyAccessedTypes)]

0 commit comments

Comments
 (0)