Skip to content

Commit ee0958e

Browse files
authored
[Mono.Android] Fix NRT warnings in hand bound code (#8086)
Fix ~67 NRT warnings in hand-written code within `Mono.Android`.
1 parent 3a075d1 commit ee0958e

30 files changed

+116
-114
lines changed

src/Mono.Android/Android.App/Dialog.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Diagnostics.CodeAnalysis;
32
using Android.Runtime;
43

54
namespace Android.App {
@@ -9,8 +8,7 @@ public partial class Dialog {
98
protected Dialog (Android.Content.Context context, bool cancelable, EventHandler cancelHandler)
109
: this (context, cancelable, new Android.Content.IDialogInterfaceOnCancelListenerImplementor () { Handler = cancelHandler }) {}
1110

12-
[return: MaybeNull]
13-
public T FindViewById<T> (int id)
11+
public T? FindViewById<T> (int id)
1412
where T : Android.Views.View
1513
{
1614
return this.FindViewById (id).JavaCast<T> ();

src/Mono.Android/Android.App/FragmentManager.cs

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
1-
using System.Diagnostics.CodeAnalysis;
21
using Android.OS;
32
using Android.Runtime;
43

54
#if ANDROID_11
65
namespace Android.App {
76
public partial class FragmentManager {
8-
[return: MaybeNull]
9-
public T FindFragmentById<T> (int id) where T : Fragment
7+
public T? FindFragmentById<T> (int id) where T : Fragment
108
{
119
return FindFragmentById (id).JavaCast<T> ();
1210
}
13-
[return: MaybeNull]
14-
public T FindFragmentByTag<T> (string tag) where T : Fragment
11+
public T? FindFragmentByTag<T> (string tag) where T : Fragment
1512
{
1613
return FindFragmentByTag (tag).JavaCast<T> ();
1714
}
18-
[return: MaybeNull]
19-
public T GetFragment<T> (Bundle bundle, string key) where T : Fragment
15+
public T? GetFragment<T> (Bundle bundle, string key) where T : Fragment
2016
{
2117
return GetFragment (bundle, key).JavaCast<T> ();
2218
}

src/Mono.Android/Android.Graphics/Color.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ public override void DestroyGenericArgumentState (Color value, ref JniValueMarsh
416416

417417
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type targetType)
418418
{
419-
var c = typeof (Color).GetConstructor (new[]{typeof (int)});
419+
var c = typeof (Color).GetConstructor (new[]{typeof (int)})!;
420420
var v = Expression.Variable (typeof (Color), sourceValue.Name + "_val");
421421
context.LocalVariables.Add (v);
422422
context.CreationStatements.Add (Expression.Assign (v, Expression.New (c, sourceValue)));

src/Mono.Android/Android.OS/AsyncTask.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,8 @@ public AsyncTask ()
8888
}
8989

9090
static IntPtr id_get;
91-
[return: MaybeNull]
9291
[Register ("get", "()Ljava/lang/Object;", "")]
93-
public TResult GetResult ()
92+
public TResult? GetResult ()
9493
{
9594
if (id_get == IntPtr.Zero)
9695
id_get = JNIEnv.GetMethodID (class_ref, "get", "()Ljava/lang/Object;");

src/Mono.Android/Android.Runtime/JNIEnv.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ public static void CopyArray (IntPtr src, string[] dest)
747747

748748
static TValue GetConverter<TValue>(Dictionary<Type, TValue> dict, Type? elementType, IntPtr array)
749749
{
750-
TValue converter;
750+
TValue? converter;
751751

752752
if (elementType != null) {
753753
if (elementType.IsEnum)

src/Mono.Android/Android.Runtime/JavaCollection.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -386,8 +386,7 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
386386
return GetEnumerator ()!;
387387
}
388388

389-
[return: MaybeNull]
390-
public IEnumerator<T> GetEnumerator ()
389+
public IEnumerator<T?> GetEnumerator ()
391390
{
392391
return System.Linq.Extensions.ToEnumerator_Dispose<T> (Iterator());
393392
}

src/Mono.Android/Android.Runtime/JavaDictionary.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -444,8 +444,7 @@ public JavaDictionary (IDictionary<K, V> items) : this ()
444444
//
445445
// https://developer.android.com/reference/java/util/Map#get(java.lang.Object)
446446
//
447-
[return: MaybeNull]
448-
internal V Get (K key)
447+
internal V? Get (K key)
449448
{
450449
if (id_get == IntPtr.Zero)
451450
id_get = JNIEnv.GetMethodID (map_class, "get", "(Ljava/lang/Object;)Ljava/lang/Object;");

src/Mono.Android/Android.Runtime/JavaList.cs

+2-4
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,7 @@ public JavaList (IEnumerable<T> items) : this ()
727727
//
728728
// https://developer.android.com/reference/java/util/List.html?hl=en#get(int)
729729
//
730-
[return: MaybeNull]
731-
internal unsafe T InternalGet (int location)
730+
internal unsafe T? InternalGet (int location)
732731
{
733732
const string id = "get.(I)Ljava/lang/Object;";
734733
JniObjectReference obj;
@@ -880,8 +879,7 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
880879
return GetEnumerator ()!;
881880
}
882881

883-
[return: MaybeNull]
884-
public IEnumerator<T> GetEnumerator ()
882+
public IEnumerator<T?> GetEnumerator ()
885883
{
886884
return System.Linq.Extensions.ToEnumerator_Dispose<T> (Iterator ());
887885
}

src/Mono.Android/Android.Runtime/JavaSet.cs

-1
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,6 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
390390
return GetEnumerator ()!;
391391
}
392392

393-
[return: MaybeNull]
394393
public IEnumerator<T> GetEnumerator ()
395394
{
396395
return System.Linq.Extensions.ToEnumerator_Dispose<T> (Iterator ());

src/Mono.Android/Android.Runtime/XmlPullParserReader.cs

+15-10
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public QName (XmlPullParserReader r, string name)
7272
}
7373

7474
public string LocalName;
75-
public string Namespace;
75+
public string? Namespace;
7676
}
7777

7878
public XmlPullParserReader (IJavaObject source)
@@ -140,7 +140,7 @@ public override bool EOF {
140140
throw new ArgumentOutOfRangeException ();
141141
}
142142

143-
public override string? GetAttribute (string localName, string namespaceName)
143+
public override string? GetAttribute (string localName, string? namespaceName)
144144
{
145145
return namespaceName == xmlns_uri ? source.GetNamespace (localName) : source.GetAttributeValue (namespaceName, localName);
146146
}
@@ -179,7 +179,7 @@ public override string? LocalName {
179179
}
180180
}
181181

182-
public override string LookupNamespace (string prefix)
182+
public override string? LookupNamespace (string prefix)
183183
{
184184
return nsmgr.LookupNamespace (prefix);
185185
}
@@ -192,7 +192,7 @@ public override void MoveToAttribute (int i)
192192
attr_value = false;
193193
}
194194

195-
public override bool MoveToAttribute (string localName, string namespaceName)
195+
public override bool MoveToAttribute (string localName, string? namespaceName)
196196
{
197197
if (namespaceName == xmlns_uri) {
198198
for (int i = 0; i < ns_count; i++)
@@ -251,7 +251,7 @@ public override string? Name {
251251
get { return String.IsNullOrEmpty (Prefix) ? LocalName : Prefix + ':' + LocalName; }
252252
}
253253

254-
public override XmlNameTable NameTable {
254+
public override XmlNameTable? NameTable {
255255
get { return nsmgr.NameTable; }
256256
}
257257

@@ -297,9 +297,14 @@ public override XmlNodeType NodeType {
297297
}
298298
}
299299

300-
public override string Prefix {
300+
public override string? Prefix {
301301
// getPrefix(), getAttributePrefix(), getNamespacePrefix() are not supported!!!
302-
get { return nsmgr.LookupPrefix (NamespaceURI); }
302+
get {
303+
if (NamespaceURI is null)
304+
return null;
305+
306+
return nsmgr.LookupPrefix (NamespaceURI);
307+
}
303308
}
304309

305310
public override bool Read ()
@@ -331,14 +336,14 @@ public override bool Read ()
331336
if (wasEmptyElement || NodeType == XmlNodeType.EndElement)
332337
nsmgr.PopScope ();
333338
if (NodeType == XmlNodeType.Element) {
334-
if (NamespaceURI != String.Empty && nsmgr.LookupPrefix (NamespaceURI) != String.Empty)
339+
if (!string.IsNullOrEmpty (NamespaceURI) && nsmgr.LookupPrefix (NamespaceURI) != String.Empty)
335340
nsmgr.AddNamespace (String.Empty, NamespaceURI);
336341
else if (NamespaceURI == String.Empty && nsmgr.DefaultNamespace != String.Empty)
337342
nsmgr.AddNamespace (String.Empty, String.Empty);
338343
for (int i = 0; i < source.AttributeCount; i++) {
339344
string? ns = source.GetAttributeNamespace (i);
340-
if (ns != String.Empty && nsmgr.LookupPrefix (ns) == null)
341-
nsmgr.AddNamespace ("p" + i, source.GetAttributeNamespace (i));
345+
if (!string.IsNullOrEmpty (ns) && nsmgr.LookupPrefix (ns) == null)
346+
nsmgr.AddNamespace ("p" + i, ns);
342347
}
343348
nsmgr.PushScope ();
344349
}

src/Mono.Android/Android.Runtime/XmlReaderPullParser.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ public int GetIdAttributeResourceValue (int defaultValue)
111111
return GetAttributeResourceValue (null, "id", defaultValue);
112112
}
113113

114-
public string ClassAttribute {
114+
public string? ClassAttribute {
115115
get { return GetAttributeValue (null, "class"); }
116116
}
117117

118-
public string IdAttribute {
118+
public string? IdAttribute {
119119
get { return GetAttributeValue (null, "id"); }
120120
}
121121

@@ -181,8 +181,11 @@ public string GetAttributeValue (int index)
181181
return r.GetAttribute (index);
182182
}
183183

184-
public string GetAttributeValue (string? namespaceURI, string? name)
184+
public string? GetAttributeValue (string? namespaceURI, string? name)
185185
{
186+
if (name is null)
187+
return null;
188+
186189
return r.GetAttribute (name, namespaceURI);
187190
}
188191

@@ -196,7 +199,7 @@ public bool GetFeature (string? name)
196199
return false;
197200
}
198201

199-
public string GetNamespace (string? prefix)
202+
public string? GetNamespace (string prefix)
200203
{
201204
return r.LookupNamespace (prefix);
202205
}

src/Mono.Android/Android.Telephony/CellInfo.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Android.Telephony {
99

1010
public partial class CellInfo {
1111

12-
static Delegate cb_getCellIdentity;
12+
static Delegate? cb_getCellIdentity;
1313
#pragma warning disable 0169
1414
static Delegate GetGetCellIdentityHandler ()
1515
{
@@ -20,7 +20,7 @@ static Delegate GetGetCellIdentityHandler ()
2020

2121
static IntPtr n_GetCellIdentity (IntPtr jnienv, IntPtr native__this)
2222
{
23-
Android.Telephony.CellInfo __this = global::Java.Lang.Object.GetObject<Android.Telephony.CellInfo> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
23+
var __this = global::Java.Lang.Object.GetObject<Android.Telephony.CellInfo> (jnienv, native__this, JniHandleOwnership.DoNotTransfer)!;
2424
return JNIEnv.ToLocalJniHandle (__this.CellIdentity);
2525
}
2626
#pragma warning restore 0169
@@ -32,15 +32,15 @@ public unsafe virtual Android.Telephony.CellIdentity CellIdentity {
3232
const string __id = "getCellIdentity.()Landroid/telephony/CellIdentity;";
3333
try {
3434
var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
35-
return global::Java.Lang.Object.GetObject<Android.Telephony.CellIdentity> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
35+
return global::Java.Lang.Object.GetObject<Android.Telephony.CellIdentity> (__rm.Handle, JniHandleOwnership.TransferLocalRef)!;
3636
}
3737
catch (Java.Lang.NoSuchMethodError) {
3838
throw new Java.Lang.AbstractMethodError (__id);
3939
}
4040
}
4141
}
4242

43-
static Delegate cb_getCellSignalStrength;
43+
static Delegate? cb_getCellSignalStrength;
4444
#pragma warning disable 0169
4545
static Delegate GetGetCellSignalStrengthHandler ()
4646
{
@@ -51,7 +51,7 @@ static Delegate GetGetCellSignalStrengthHandler ()
5151

5252
static IntPtr n_GetCellSignalStrength (IntPtr jnienv, IntPtr native__this)
5353
{
54-
Android.Telephony.CellInfo __this = global::Java.Lang.Object.GetObject<Android.Telephony.CellInfo> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
54+
var __this = global::Java.Lang.Object.GetObject<Android.Telephony.CellInfo> (jnienv, native__this, JniHandleOwnership.DoNotTransfer)!;
5555
return JNIEnv.ToLocalJniHandle (__this.CellSignalStrength);
5656
}
5757
#pragma warning restore 0169
@@ -63,7 +63,7 @@ public unsafe virtual Android.Telephony.CellSignalStrength CellSignalStrength {
6363
const string __id = "getCellSignalStrength.()Landroid/telephony/CellSignalStrength;";
6464
try {
6565
var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
66-
return global::Java.Lang.Object.GetObject<Android.Telephony.CellSignalStrength> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
66+
return global::Java.Lang.Object.GetObject<Android.Telephony.CellSignalStrength> (__rm.Handle, JniHandleOwnership.TransferLocalRef)!;
6767
}
6868
catch (Java.Lang.NoSuchMethodError) {
6969
throw new Java.Lang.AbstractMethodError (__id);

src/Mono.Android/Android.Views/View.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ public bool PerformAccessibilityAction (GlobalAction action, Bundle arguments)
2222
}
2323
#endif
2424

25-
[return: MaybeNull]
26-
public T FindViewById<T> (int id)
25+
public T? FindViewById<T> (int id)
2726
where T : Android.Views.View
2827
{
2928
return this.FindViewById (id).JavaCast<T> ();

src/Mono.Android/Android.Views/Window.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ namespace Android.Views {
66

77
partial class Window {
88

9-
[return: MaybeNull]
10-
public T FindViewById<T> (int id)
9+
public T? FindViewById<T> (int id)
1110
where T : Android.Views.View
1211
{
1312
return this.FindViewById (id).JavaCast<T> ();

src/Mono.Android/Android.Widget/ArrayAdapter.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,8 @@ public void Add (T @object)
185185
}
186186

187187
static IntPtr id_getItem_I;
188-
[return: MaybeNull]
189188
[Register ("getItem", "(I)Ljava/lang/Object;", "GetGetItem_IHandler")]
190-
public T GetItem (int position)
189+
public T? GetItem (int position)
191190
{
192191
if (id_getItem_I == IntPtr.Zero)
193192
id_getItem_I = JNIEnv.GetMethodID (class_ref, "getItem", "(I)Ljava/lang/Object;");

src/Mono.Android/Java.Interop/JavaConvert.cs

+9-13
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,13 @@ static Func<IntPtr, JniHandleOwnership, object> GetJniHandleConverterForType ([D
9292
typeof (Func<IntPtr, JniHandleOwnership, object>), m);
9393
}
9494

95-
[return: MaybeNull]
96-
public static T FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer)
95+
public static T? FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer)
9796
{
9897
bool set;
9998
return FromJniHandle<T>(handle, transfer, out set);
10099
}
101100

102-
[return: MaybeNull]
103-
public static T FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer, out bool set)
101+
public static T? FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer, out bool set)
104102
{
105103
if (handle == IntPtr.Zero) {
106104
set = false;
@@ -109,7 +107,7 @@ public static T FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer, out
109107

110108
var interned = (IJavaObject?) Java.Lang.Object.PeekObject (handle);
111109
if (interned != null) {
112-
T r = FromJavaObject<T>(interned, out set);
110+
T? r = FromJavaObject<T>(interned, out set);
113111
if (set) {
114112
JNIEnv.DeleteRef (handle, transfer);
115113
return r;
@@ -119,20 +117,20 @@ public static T FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer, out
119117
set = true;
120118

121119
if (typeof (IJavaObject).IsAssignableFrom (typeof (T)))
122-
return (T) Java.Lang.Object._GetObject<T> (handle, transfer);
120+
return (T?) Java.Lang.Object._GetObject<T> (handle, transfer);
123121

124122
var converter = GetJniHandleConverter (typeof (T)) ??
125123
GetJniHandleConverter (GetTypeMapping (handle));
126124
if (converter != null)
127-
return (T) converter (handle, transfer);
125+
return (T?) converter (handle, transfer);
128126

129127
var v = Java.Lang.Object.GetObject (handle, transfer);
130128
if (v is T)
131129
return (T) v;
132130

133131
// hail mary pass; perhaps there's a MCW which participates in normal
134132
// .NET type conversion?
135-
return (T) Convert.ChangeType (v, typeof (T), CultureInfo.InvariantCulture);
133+
return (T?) Convert.ChangeType (v, typeof (T), CultureInfo.InvariantCulture);
136134
}
137135

138136
public static object? FromJniHandle (IntPtr handle, JniHandleOwnership transfer, Type? targetType = null)
@@ -208,15 +206,13 @@ public static T FromJniHandle<T>(IntPtr handle, JniHandleOwnership transfer, out
208206
return null;
209207
}
210208

211-
[return: MaybeNull]
212-
public static T FromJavaObject<T>(IJavaObject? value)
209+
public static T? FromJavaObject<T>(IJavaObject? value)
213210
{
214211
bool set;
215212
return FromJavaObject<T>(value, out set);
216213
}
217214

218-
[return: MaybeNull]
219-
public static T FromJavaObject<T>(IJavaObject? value, out bool set)
215+
public static T? FromJavaObject<T>(IJavaObject? value, out bool set)
220216
{
221217
if (value == null) {
222218
set = false;
@@ -244,7 +240,7 @@ public static T FromJavaObject<T>(IJavaObject? value, out bool set)
244240
set = true;
245241
var converter = GetJniHandleConverter (typeof (T));
246242
if (converter != null)
247-
return (T) converter (lrefValue, JniHandleOwnership.TransferLocalRef);
243+
return (T?) converter (lrefValue, JniHandleOwnership.TransferLocalRef);
248244
JNIEnv.DeleteLocalRef (lrefValue);
249245
return (T) Convert.ChangeType (value, typeof (T), CultureInfo.InvariantCulture);
250246
}

0 commit comments

Comments
 (0)