diff --git a/src/Mono.Android/Java.Lang/Object.cs b/src/Mono.Android/Java.Lang/Object.cs index 814d4c3b277..0942d917e57 100644 --- a/src/Mono.Android/Java.Lang/Object.cs +++ b/src/Mono.Android/Java.Lang/Object.cs @@ -141,20 +141,29 @@ static JniObjectReferenceOptions FromJniHandleOwnership (JniHandleOwnership tran return (T?)PeekObject (handle, typeof (T)); } - public static T? GetObject (IntPtr jnienv, IntPtr handle, JniHandleOwnership transfer) + public static T? GetObject< + [DynamicallyAccessedMembers (Constructors)] + T + > (IntPtr jnienv, IntPtr handle, JniHandleOwnership transfer) where T : class, IJavaObject { JNIEnv.CheckHandle (jnienv); return GetObject (handle, transfer); } - public static T? GetObject (IntPtr handle, JniHandleOwnership transfer) + public static T? GetObject< + [DynamicallyAccessedMembers (Constructors)] + T + > (IntPtr handle, JniHandleOwnership transfer) where T : class, IJavaObject { - return _GetObject(handle, transfer); + return _GetObject (handle, transfer); } - internal static T? _GetObject (IntPtr handle, JniHandleOwnership transfer) + internal static T? _GetObject< + [DynamicallyAccessedMembers (Constructors)] + T + > (IntPtr handle, JniHandleOwnership transfer) { if (handle == IntPtr.Zero) return default (T); @@ -165,19 +174,15 @@ static JniObjectReferenceOptions FromJniHandleOwnership (JniHandleOwnership tran internal static IJavaPeerable? GetObject ( IntPtr handle, JniHandleOwnership transfer, + [DynamicallyAccessedMembers (Constructors)] Type? type = null) { if (handle == IntPtr.Zero) return null; - var r = GetPeer (handle, type); + var r = JniEnvironment.Runtime.ValueManager.GetPeer (new JniObjectReference (handle), type); JNIEnv.DeleteRef (handle, transfer); return r; - - // FIXME: should use [DynamicallyAccessedMembers (Constructors)] in the future - [UnconditionalSuppressMessage ("Trimming", "IL2067:'targetType' argument does not satisfy 'DynamicallyAccessedMemberTypes.PublicConstructors', 'DynamicallyAccessedMemberTypes.NonPublicConstructors' in call to 'Java.Interop.JniRuntime.JniValueManager.GetPeer(JniObjectReference, Type)'.", Justification = "The MarkJavaObjects step preserves ctors on Java.Lang.Object subclasses.")] - static IJavaPeerable? GetPeer (IntPtr handle, Type? type) => - JniEnvironment.Runtime.ValueManager.GetPeer (new JniObjectReference (handle), type); } [EditorBrowsable (EditorBrowsableState.Never)]