diff options
Diffstat (limited to 'test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs')
-rw-r--r-- | test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs b/test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs index 18e70c058..bff3994a2 100644 --- a/test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs +++ b/test/Mono.Linker.Tests.Cases/Reflection/MethodUsedViaReflection.cs @@ -17,6 +17,7 @@ namespace Mono.Linker.Tests.Cases.Reflection GetMethod_Name_Types.TestNameAndType (); GetMethod_Name_BindingAttr.TestExplicitBindingFlags (); GetMethod_Name_BindingAttr.TestUnknownBindingFlags (BindingFlags.Public); + GetMethod_Name_BindingAttr.TestUnknownBindingFlagsAndName (BindingFlags.Public, "DoesntMatter"); GetMethod_Name_BindingAttr.TestUnknownNullBindingFlags (BindingFlags.Public); GetMethod_Name_BindingAttr_Binder_Types_Modifiers.TestNameBindingFlagsAndParameterModifier (); GetMethod_Name_BindingAttr_Binder_CallConvention_Types_Modifiers.TestNameBindingFlagsCallingConventionParameterModifier (); @@ -37,6 +38,7 @@ namespace Mono.Linker.Tests.Cases.Reflection DerivedAndBase.TestMethodInBaseType (); IgnoreCaseBindingFlags.TestIgnoreCaseBindingFlags (); FailIgnoreCaseBindingFlags.TestFailIgnoreCaseBindingFlags (); + IgnorableBindingFlags.TestIgnorableBindingFlags (); UnsupportedBindingFlags.TestUnsupportedBindingFlags (); } @@ -200,6 +202,25 @@ namespace Mono.Linker.Tests.Cases.Reflection } [Kept] + class UnknownBindingFlagsAndName + { + [Kept] + private static int OnlyCalledViaReflection () + { + return 42; + } + } + + [Kept] + [RecognizedReflectionAccessPattern] + public static void TestUnknownBindingFlagsAndName (BindingFlags bindingFlags, string name) + { + // Since the binding flags and name are not known linker should mark all methods on the type + var method = typeof (UnknownBindingFlagsAndName).GetMethod (name, bindingFlags); + method.Invoke (null, new object[] { }); + } + + [Kept] private class NullBindingFlags { [Kept] @@ -732,6 +753,28 @@ namespace Mono.Linker.Tests.Cases.Reflection } [Kept] + class IgnorableBindingFlags + { + [Kept] + public int OnlyCalledViaReflection () + { + return 54; + } + + private bool Unmarked () + { + return true; + } + + [Kept] + public static void TestIgnorableBindingFlags () + { + var method = typeof (IgnorableBindingFlags).GetMethod ("OnlyCalledViaReflection", BindingFlags.Public | BindingFlags.InvokeMethod); + method.Invoke (null, new object[] { }); + } + } + + [Kept] class UnsupportedBindingFlags { [Kept] @@ -741,7 +784,7 @@ namespace Mono.Linker.Tests.Cases.Reflection } [Kept] - private bool MarkedDueToInvokeMethod () + private bool MarkedDueToChangeType () { return true; } @@ -749,7 +792,7 @@ namespace Mono.Linker.Tests.Cases.Reflection [Kept] public static void TestUnsupportedBindingFlags () { - var method = typeof (UnsupportedBindingFlags).GetMethod ("OnlyCalledViaReflection", BindingFlags.InvokeMethod); + var method = typeof (UnsupportedBindingFlags).GetMethod ("OnlyCalledViaReflection", BindingFlags.Public | BindingFlags.SuppressChangeType); method.Invoke (null, new object[] { }); } } |