Skip to content

Commit 02b53c5

Browse files
committed
Revert "Fix handling of unknown BindingFlags (#2288)"
This reverts commit 108fe5b.
1 parent 0f1bca7 commit 02b53c5

6 files changed

Lines changed: 8 additions & 129 deletions

File tree

src/linker/Linker.Dataflow/ReflectionMethodBodyScanner.cs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,8 @@ public override bool HandleCall (MethodBody callingMethodBody, MethodReference c
11161116
reflectionContext.RecordHandledPattern ();
11171117
} else {
11181118
// Otherwise fall back to the bitfield requirements
1119-
var requiredMemberTypes = GetDynamicallyAccessedMemberTypesFromBindingFlagsForConstructors (bindingFlags);
1119+
var requiredMemberTypes = HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicConstructors : DynamicallyAccessedMemberTypes.None;
1120+
requiredMemberTypes |= HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicConstructors : DynamicallyAccessedMemberTypes.None;
11201121
// We can scope down the public constructors requirement if we know the number of parameters is 0
11211122
if (requiredMemberTypes == DynamicallyAccessedMemberTypes.PublicConstructors && ctorParameterCount == 0)
11221123
requiredMemberTypes = DynamicallyAccessedMemberTypes.PublicParameterlessConstructor;
@@ -2431,33 +2432,27 @@ void ValidateGenericMethodInstantiation (
24312432

24322433
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForNestedTypes (BindingFlags? bindingFlags) =>
24332434
(HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicNestedTypes : DynamicallyAccessedMemberTypes.None) |
2434-
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicNestedTypes : DynamicallyAccessedMemberTypes.None) |
2435-
(BindingFlagsAreUnsupported (bindingFlags) ? DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes : DynamicallyAccessedMemberTypes.None);
2435+
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicNestedTypes : DynamicallyAccessedMemberTypes.None);
24362436

24372437
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForConstructors (BindingFlags? bindingFlags) =>
24382438
(HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicConstructors : DynamicallyAccessedMemberTypes.None) |
2439-
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicConstructors : DynamicallyAccessedMemberTypes.None) |
2440-
(BindingFlagsAreUnsupported (bindingFlags) ? DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors : DynamicallyAccessedMemberTypes.None);
2439+
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicConstructors : DynamicallyAccessedMemberTypes.None);
24412440

24422441
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForMethods (BindingFlags? bindingFlags) =>
24432442
(HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicMethods : DynamicallyAccessedMemberTypes.None) |
2444-
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicMethods : DynamicallyAccessedMemberTypes.None) |
2445-
(BindingFlagsAreUnsupported (bindingFlags) ? DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods : DynamicallyAccessedMemberTypes.None);
2443+
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicMethods : DynamicallyAccessedMemberTypes.None);
24462444

24472445
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForFields (BindingFlags? bindingFlags) =>
24482446
(HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicFields : DynamicallyAccessedMemberTypes.None) |
2449-
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicFields : DynamicallyAccessedMemberTypes.None) |
2450-
(BindingFlagsAreUnsupported (bindingFlags) ? DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields : DynamicallyAccessedMemberTypes.None);
2447+
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicFields : DynamicallyAccessedMemberTypes.None);
24512448

24522449
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForProperties (BindingFlags? bindingFlags) =>
24532450
(HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicProperties : DynamicallyAccessedMemberTypes.None) |
2454-
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicProperties : DynamicallyAccessedMemberTypes.None) |
2455-
(BindingFlagsAreUnsupported (bindingFlags) ? DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties : DynamicallyAccessedMemberTypes.None);
2451+
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicProperties : DynamicallyAccessedMemberTypes.None);
24562452

24572453
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForEvents (BindingFlags? bindingFlags) =>
24582454
(HasBindingFlag (bindingFlags, BindingFlags.Public) ? DynamicallyAccessedMemberTypes.PublicEvents : DynamicallyAccessedMemberTypes.None) |
2459-
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicEvents : DynamicallyAccessedMemberTypes.None) |
2460-
(BindingFlagsAreUnsupported (bindingFlags) ? DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents : DynamicallyAccessedMemberTypes.None);
2455+
(HasBindingFlag (bindingFlags, BindingFlags.NonPublic) ? DynamicallyAccessedMemberTypes.NonPublicEvents : DynamicallyAccessedMemberTypes.None);
24612456
static DynamicallyAccessedMemberTypes GetDynamicallyAccessedMemberTypesFromBindingFlagsForMembers (BindingFlags? bindingFlags) =>
24622457
GetDynamicallyAccessedMemberTypesFromBindingFlagsForConstructors (bindingFlags) |
24632458
GetDynamicallyAccessedMemberTypesFromBindingFlagsForEvents (bindingFlags) |

test/Mono.Linker.Tests.Cases/Reflection/EventUsedViaReflection.cs

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public static void Main ()
1717
TestNameBindingFlags ();
1818
TestNameWrongBindingFlags ();
1919
TestNameUnknownBindingFlags (BindingFlags.Public);
20-
TestNameUnknownBindingFlagsAndName (BindingFlags.Public, "DoesntMatter");
2120
TestNullName ();
2221
TestEmptyName ();
2322
TestNonExistingName ();
@@ -72,13 +71,6 @@ static void TestNameUnknownBindingFlags (BindingFlags bindingFlags)
7271
var eventInfo = typeof (UnknownBindingFlags).GetEvent ("PrivateEvent", bindingFlags);
7372
}
7473

75-
[Kept]
76-
static void TestNameUnknownBindingFlagsAndName (BindingFlags bindingFlags, string name)
77-
{
78-
// Since the binding flags are not known linker should mark all events on the type
79-
var eventInfo = typeof (UnknownBindingFlagsAndName).GetEvent (name, bindingFlags);
80-
}
81-
8274
[Kept]
8375
static void TestNullName ()
8476
{
@@ -229,30 +221,6 @@ class UnknownBindingFlags
229221
public event EventHandler<EventArgs> PublicEvent;
230222
}
231223

232-
class UnknownBindingFlagsAndName
233-
{
234-
[Kept]
235-
[KeptEventAddMethod]
236-
[KeptEventRemoveMethod]
237-
[method: ExpectBodyModified]
238-
internal event EventHandler<EventArgs> InternalEvent;
239-
[Kept]
240-
[KeptBackingField]
241-
[KeptEventAddMethod]
242-
[KeptEventRemoveMethod]
243-
static event EventHandler<EventArgs> Static;
244-
[Kept]
245-
[KeptEventAddMethod]
246-
[KeptEventRemoveMethod]
247-
[method: ExpectBodyModified]
248-
private event EventHandler<EventArgs> PrivateEvent;
249-
[Kept]
250-
[KeptEventAddMethod]
251-
[KeptEventRemoveMethod]
252-
[method: ExpectBodyModified]
253-
public event EventHandler<EventArgs> PublicEvent;
254-
}
255-
256224
class IfClass
257225
{
258226
[Kept]

test/Mono.Linker.Tests.Cases/Reflection/FieldUsedViaReflection.cs

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public static void Main ()
1515
TestNameBindingFlags ();
1616
TestNameWrongBindingFlags ();
1717
TestNameUnknownBindingFlags (BindingFlags.Public);
18-
TestNameUnknownBindingFlagsAndName (BindingFlags.Public, "DoesntMatter");
1918
TestNullName ();
2019
TestEmptyName ();
2120
TestNonExistingName ();
@@ -67,13 +66,6 @@ static void TestNameUnknownBindingFlags (BindingFlags bindingFlags)
6766
var field = typeof (UnknownBindingFlags).GetField ("field", bindingFlags);
6867
}
6968

70-
[Kept]
71-
static void TestNameUnknownBindingFlagsAndName (BindingFlags bindingFlags, string name)
72-
{
73-
// Since the binding flags and name are not known linker should mark all fields on the type
74-
var field = typeof (UnknownBindingFlagsAndName).GetField (name, bindingFlags);
75-
}
76-
7769
[Kept]
7870
static void TestNullName ()
7971
{
@@ -194,17 +186,6 @@ private class UnknownBindingFlags
194186
private static int privatefield;
195187
}
196188

197-
[Kept]
198-
private class UnknownBindingFlagsAndName
199-
{
200-
[Kept]
201-
public static int field;
202-
[Kept]
203-
public int nonStatic;
204-
[Kept]
205-
private static int privatefield;
206-
}
207-
208189
[Kept]
209190
private class IfClass
210191
{

test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public static void Main ()
1717
GetMethod_Name_Types.TestNameAndType ();
1818
GetMethod_Name_BindingAttr.TestExplicitBindingFlags ();
1919
GetMethod_Name_BindingAttr.TestUnknownBindingFlags (BindingFlags.Public);
20-
GetMethod_Name_BindingAttr.TestUnknownBindingFlagsAndName (BindingFlags.Public, "DoesntMatter");
2120
GetMethod_Name_BindingAttr.TestUnknownNullBindingFlags (BindingFlags.Public);
2221
GetMethod_Name_BindingAttr_Binder_Types_Modifiers.TestNameBindingFlagsAndParameterModifier ();
2322
GetMethod_Name_BindingAttr_Binder_CallConvention_Types_Modifiers.TestNameBindingFlagsCallingConventionParameterModifier ();
@@ -201,25 +200,6 @@ public static void TestUnknownBindingFlags (BindingFlags bindingFlags)
201200
method.Invoke (null, new object[] { });
202201
}
203202

204-
[Kept]
205-
class UnknownBindingFlagsAndName
206-
{
207-
[Kept]
208-
private static int OnlyCalledViaReflection ()
209-
{
210-
return 42;
211-
}
212-
}
213-
214-
[Kept]
215-
[RecognizedReflectionAccessPattern]
216-
public static void TestUnknownBindingFlagsAndName (BindingFlags bindingFlags, string name)
217-
{
218-
// Since the binding flags and name are not known linker should mark all methods on the type
219-
var method = typeof (UnknownBindingFlagsAndName).GetMethod (name, bindingFlags);
220-
method.Invoke (null, new object[] { });
221-
}
222-
223203
[Kept]
224204
private class NullBindingFlags
225205
{

test/Mono.Linker.Tests.Cases/Reflection/NestedTypeUsedViaReflection.cs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public static void Main ()
1616
TestPrivateByName ();
1717
TestByBindingFlags ();
1818
TestByUnknownBindingFlags (BindingFlags.Public);
19-
TestByUnknownBindingFlagsAndName (BindingFlags.Public, "DoesntMatter");
2019
TestNonExistingName ();
2120
TestNullType ();
2221
TestIgnoreCaseBindingFlags ();
@@ -81,16 +80,6 @@ static void TestByUnknownBindingFlags (BindingFlags bindingFlags)
8180
_ = typeof (UnknownBindingFlags).GetNestedType (nameof (PublicNestedType), bindingFlags);
8281
}
8382

84-
[Kept]
85-
[RecognizedReflectionAccessPattern (
86-
typeof (Type), nameof (Type.GetNestedType), new Type[] { typeof (string), typeof (BindingFlags) },
87-
typeof (UnknownBindingFlagsAndName.PublicNestedType), null, (Type[]) null)]
88-
static void TestByUnknownBindingFlagsAndName (BindingFlags bindingFlags, string name)
89-
{
90-
// Since the binding flags and name are not known linker should mark all nested types on the type
91-
_ = typeof (UnknownBindingFlagsAndName).GetNestedType (name, bindingFlags);
92-
}
93-
9483
[Kept]
9584
static void TestNonExistingName ()
9685
{
@@ -135,16 +124,6 @@ public static class PublicNestedType { }
135124
private static class PrivateNestedType { }
136125
}
137126

138-
[Kept]
139-
private class UnknownBindingFlagsAndName
140-
{
141-
[Kept]
142-
public static class PublicNestedType { }
143-
144-
[Kept]
145-
private static class PrivateNestedType { }
146-
}
147-
148127
[Kept]
149128
private class IgnoreCaseClass
150129
{

test/Mono.Linker.Tests.Cases/Reflection/PropertyUsedViaReflection.cs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public static void Main ()
1717
TestGetterOnly ();
1818
TestBindingFlags ();
1919
TestUnknownBindingFlags (BindingFlags.Public);
20-
TestUnknownBindingFlagsAndName (BindingFlags.Public, "IrrelevantName");
2120
TestNullName ();
2221
TestEmptyName ();
2322
TestNonExistingName ();
@@ -91,17 +90,6 @@ static void TestUnknownBindingFlags (BindingFlags bindingFlags)
9190
property.GetValue (null, new object[] { });
9291
}
9392

94-
[Kept]
95-
[RecognizedReflectionAccessPattern (
96-
typeof (Type), nameof (Type.GetProperty), new Type[] { typeof (string), typeof (BindingFlags) },
97-
typeof (UnknownBindingFlagsAndName), nameof (UnknownBindingFlagsAndName.SomeProperty), (Type[]) null)]
98-
static void TestUnknownBindingFlagsAndName (BindingFlags bindingFlags, string name)
99-
{
100-
// Since the binding flags and name are not known linker should mark all properties on the type
101-
var property = typeof (UnknownBindingFlagsAndName).GetProperty (name, bindingFlags);
102-
property.GetValue (null, new object[] { });
103-
}
104-
10593
[Kept]
10694
static void TestNullName ()
10795
{
@@ -332,18 +320,6 @@ internal static int SomeProperty {
332320
}
333321
}
334322

335-
[Kept]
336-
class UnknownBindingFlagsAndName
337-
{
338-
[Kept]
339-
internal static int SomeProperty {
340-
[Kept]
341-
private get { return _field; }
342-
[Kept]
343-
set { _field = value; }
344-
}
345-
}
346-
347323
[Kept]
348324
class IgnoreCaseBindingFlagsClass
349325
{

0 commit comments

Comments
 (0)