Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change Annotations #48536

Merged
merged 7 commits into from
Mar 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -184,13 +184,13 @@ public override Type[] GetNestedTypes(BindingFlags bindingAttr)
return m_typeBuilder.GetNestedType(name, bindingAttr);
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
{
return m_typeBuilder.GetMember(name, type, bindingAttr);
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
{
return m_typeBuilder.GetMembers(bindingAttr);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,15 +137,15 @@ public override Type MakeArrayType(int rank)
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
public override Type GetNestedType(string name, BindingFlags bindingAttr) { throw new NotSupportedException(); }

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr) { throw new NotSupportedException(); }

public override InterfaceMapping GetInterfaceMap(Type interfaceType) { throw new NotSupportedException(); }

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
public override EventInfo[] GetEvents(BindingFlags bindingAttr) { throw new NotSupportedException(); }

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) { throw new NotSupportedException(); }

protected override TypeAttributes GetAttributeFlagsImpl() { return TypeAttributes.Public; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -444,13 +444,13 @@ public override Type GetNestedType(string name, BindingFlags bindingAttr)
throw new NotSupportedException(SR.NotSupported_NonReflectedType);
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
{
throw new NotSupportedException(SR.NotSupported_NonReflectedType);
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
{
throw new NotSupportedException(SR.NotSupported_NonReflectedType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -912,7 +912,7 @@ public override Type[] GetNestedTypes(BindingFlags bindingAttr)
return m_bakedRuntimeType.GetNestedType(name, bindingAttr);
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
{
if (!IsCreated())
Expand All @@ -938,7 +938,7 @@ public override EventInfo[] GetEvents(BindingFlags bindingAttr)
return m_bakedRuntimeType.GetEvents(bindingAttr);
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
{
if (!IsCreated())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,15 +199,15 @@ public override Type? BaseType
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
public override Type GetNestedType(string name, BindingFlags bindingAttr) { throw new NotSupportedException(); }

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr) { throw new NotSupportedException(); }

public override InterfaceMapping GetInterfaceMap(Type interfaceType) { throw new NotSupportedException(); }

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
public override EventInfo[] GetEvents(BindingFlags bindingAttr) { throw new NotSupportedException(); }

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) { throw new NotSupportedException(); }

protected override TypeAttributes GetAttributeFlagsImpl() { return m_type.Attributes; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2611,7 +2611,7 @@ public override Type[] GetNestedTypes(BindingFlags bindingAttr)
return GetNestedTypeCandidates(null, bindingAttr, false).ToArray();
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
{
ListBuilder<MethodInfo> methods = GetMethodCandidates(null, GenericParameterCountAny, bindingAttr, CallingConventions.Any, null, false);
Expand Down Expand Up @@ -2954,7 +2954,7 @@ public override InterfaceMapping GetInterfaceMap(Type ifaceType)
return match;
}

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
{
if (name is null) throw new ArgumentNullException(nameof(name));
Expand Down
2 changes: 1 addition & 1 deletion src/libraries/Common/src/System/Drawing/ColorTable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ private static Dictionary<string, Color> GetColors()

private static void FillWithProperties(
Dictionary<string, Color> dictionary,
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)] Type typeWithColors) // can remove NonPublicProperties once https://github.com/mono/linker/issues/1724 is fixed
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] Type typeWithColors)
{
foreach (PropertyInfo prop in typeWithColors.GetProperties(BindingFlags.Public | BindingFlags.Static))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ public interface IReflect
PropertyInfo[] GetProperties(BindingFlags bindingAttr);

// Return an array of members which match the passed in name.
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(System.Type.GetAllMembers)]
MemberInfo[] GetMember(string name, BindingFlags bindingAttr);

// Return an array of all of the members defined for this object.
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(System.Type.GetAllMembers)]
MemberInfo[] GetMembers(BindingFlags bindingAttr);

// Description of the Binding Process.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public sealed override Type MakeArrayType(int rank)
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
public sealed override FieldInfo[] GetFields(BindingFlags bindingAttr) => throw new NotSupportedException(SR.NotSupported_SignatureType);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public sealed override MemberInfo[] GetMembers(BindingFlags bindingAttr) => throw new NotSupportedException(SR.NotSupported_SignatureType);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)]
Expand Down Expand Up @@ -143,10 +143,10 @@ public sealed override Type MakeArrayType(int rank)
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
public sealed override MemberInfo[] FindMembers(MemberTypes memberType, BindingFlags bindingAttr, MemberFilter? filter, object? filterCriteria) => throw new NotSupportedException(SR.NotSupported_SignatureType);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public sealed override MemberInfo[] GetMember(string name, BindingFlags bindingAttr) => throw new NotSupportedException(SR.NotSupported_SignatureType);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public sealed override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr) => throw new NotSupportedException(SR.NotSupported_SignatureType);

[DynamicallyAccessedMembers(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,10 @@ public TypeDelegator([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
public override Type? GetNestedType(string name, BindingFlags bindingAttr) => typeImpl.GetNestedType(name, bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr) => typeImpl.GetMember(name, type, bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public override MemberInfo[] GetMembers(BindingFlags bindingAttr) => typeImpl.GetMembers(bindingAttr);

protected override TypeAttributes GetAttributeFlagsImpl() => typeImpl.Attributes;
Expand Down
60 changes: 29 additions & 31 deletions src/libraries/System.Private.CoreLib/src/System/Type.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,6 @@ public ConstructorInfo? TypeInitializer
protected abstract ConstructorInfo? GetConstructorImpl(BindingFlags bindingAttr, Binder? binder, CallingConventions callConvention, Type[] types, ParameterModifier[]? modifiers);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetConstructors(BindingFlags.Public) but this is what the body is doing")]
public ConstructorInfo[] GetConstructors() => GetConstructors(BindingFlags.Public | BindingFlags.Instance);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
Expand All @@ -187,8 +185,6 @@ public ConstructorInfo? TypeInitializer
public abstract EventInfo? GetEvent(string name, BindingFlags bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetEvents(BindingFlags.Public) but this is what the body is doing")]
public virtual EventInfo[] GetEvents() => GetEvents(Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
Expand All @@ -201,42 +197,36 @@ public ConstructorInfo? TypeInitializer
public abstract FieldInfo? GetField(string name, BindingFlags bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetFields(BindingFlags.Public) but this is what the body is doing")]
public FieldInfo[] GetFields() => GetFields(Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
public abstract FieldInfo[] GetFields(BindingFlags bindingAttr);

[DynamicallyAccessedMembers(
DynamicallyAccessedMemberTypes.PublicFields
| DynamicallyAccessedMemberTypes.PublicMethods
| DynamicallyAccessedMemberTypes.PublicEvents
| DynamicallyAccessedMemberTypes.PublicProperties
| DynamicallyAccessedMemberTypes.PublicConstructors
| DynamicallyAccessedMemberTypes.PublicNestedTypes)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetMember(BindingFlags.Public) but this is what the body is doing")]
DynamicallyAccessedMemberTypes.PublicFields |
DynamicallyAccessedMemberTypes.PublicMethods |
DynamicallyAccessedMemberTypes.PublicEvents |
DynamicallyAccessedMemberTypes.PublicProperties |
DynamicallyAccessedMemberTypes.PublicConstructors |
DynamicallyAccessedMemberTypes.PublicNestedTypes)]
public MemberInfo[] GetMember(string name) => GetMember(name, Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public virtual MemberInfo[] GetMember(string name, BindingFlags bindingAttr) => GetMember(name, MemberTypes.All, bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public virtual MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr) => throw new NotSupportedException(SR.NotSupported_SubclassOverride);

[DynamicallyAccessedMembers(
DynamicallyAccessedMemberTypes.PublicFields
| DynamicallyAccessedMemberTypes.PublicMethods
| DynamicallyAccessedMemberTypes.PublicEvents
| DynamicallyAccessedMemberTypes.PublicProperties
| DynamicallyAccessedMemberTypes.PublicConstructors
| DynamicallyAccessedMemberTypes.PublicNestedTypes)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetMembers(BindingFlags.Public) but this is what the body is doing")]
DynamicallyAccessedMemberTypes.PublicFields |
DynamicallyAccessedMemberTypes.PublicMethods |
DynamicallyAccessedMemberTypes.PublicEvents |
DynamicallyAccessedMemberTypes.PublicProperties |
DynamicallyAccessedMemberTypes.PublicConstructors |
DynamicallyAccessedMemberTypes.PublicNestedTypes)]
public MemberInfo[] GetMembers() => GetMembers(Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
[DynamicallyAccessedMembers(GetAllMembers)]
public abstract MemberInfo[] GetMembers(BindingFlags bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]
Expand Down Expand Up @@ -325,8 +315,6 @@ public ConstructorInfo? TypeInitializer
protected virtual MethodInfo? GetMethodImpl(string name, int genericParameterCount, BindingFlags bindingAttr, Binder? binder, CallingConventions callConvention, Type[]? types, ParameterModifier[]? modifiers) => throw new NotSupportedException();

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetMethods(BindingFlags.Public) but this is what the body is doing")]
public MethodInfo[] GetMethods() => GetMethods(Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)]
Expand All @@ -339,8 +327,6 @@ public ConstructorInfo? TypeInitializer
public abstract Type? GetNestedType(string name, BindingFlags bindingAttr);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetNestedTypes(BindingFlags.Public) but this is what the body is doing")]
public Type[] GetNestedTypes() => GetNestedTypes(Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
Expand Down Expand Up @@ -390,8 +376,6 @@ public ConstructorInfo? TypeInitializer
protected abstract PropertyInfo? GetPropertyImpl(string name, BindingFlags bindingAttr, Binder? binder, Type? returnType, Type[]? types, ParameterModifier[]? modifiers);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)]
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
Justification = "Linker doesn't recognize GetProperties(BindingFlags.Public) but this is what the body is doing")]
public PropertyInfo[] GetProperties() => GetProperties(Type.DefaultLookup);

[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
Expand Down Expand Up @@ -583,5 +567,19 @@ public static Binder DefaultBinder
public static readonly MemberFilter FilterNameIgnoreCase = (m, c) => FilterNameImpl(m, c!, StringComparison.OrdinalIgnoreCase);

private const BindingFlags DefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
// DynamicallyAccessedMemberTypes.All keeps more data than what a member can use:
// - Keeps info about interfaces
// - Complete Nested types (nested type body and all its members including other nested types)
// - Public and private base type information
// Instead, the GetAllMembers constant will keep:
// - The nested types body but not the members
// - Base type public information but not private information. This information should not
// be visible via the derived type and is ignored by reflection
internal const DynamicallyAccessedMemberTypes GetAllMembers = DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields |
DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods |
DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents |
DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties |
DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors |
DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes;
}
}
Loading