@@ -68,7 +68,7 @@ static JavaClassInfo ()
6868 public static JavaClassInfo GetClassInfo ( string jniClassName )
6969 {
7070 lock ( Classes ) {
71- JavaClassInfo info = _GetClassInfo ( jniClassName ) ;
71+ JavaClassInfo ? info = _GetClassInfo ( jniClassName ) ;
7272 if ( info != null ) {
7373 Interlocked . Increment ( ref info . RefCount ) ;
7474 return info ;
@@ -80,7 +80,7 @@ public static JavaClassInfo GetClassInfo (string jniClassName)
8080 }
8181 }
8282
83- static JavaClassInfo _GetClassInfo ( string jniClassName )
83+ static JavaClassInfo ? _GetClassInfo ( string jniClassName )
8484 {
8585 lock ( Classes ) {
8686 WeakReference value ;
@@ -114,19 +114,19 @@ public static int GetClassInfoCount (string jniClassName)
114114
115115 int RefCount = 1 ;
116116
117- List < JavaConstructorInfo > constructors ;
118- Dictionary < string , List < JavaFieldInfo > > fields ;
119- Dictionary < string , List < JavaMethodInfo > > methods ;
117+ List < JavaConstructorInfo > ? constructors ;
118+ Dictionary < string , List < JavaFieldInfo > > ? fields ;
119+ Dictionary < string , List < JavaMethodInfo > > ? methods ;
120120
121- public List < JavaConstructorInfo > Constructors {
121+ public List < JavaConstructorInfo > ? Constructors {
122122 get { return LookupConstructors ( ) ; }
123123 }
124124
125- public Dictionary < string , List < JavaFieldInfo > > Fields {
125+ public Dictionary < string , List < JavaFieldInfo > > ? Fields {
126126 get { return LookupFields ( ) ; }
127127 }
128128
129- public Dictionary < string , List < JavaMethodInfo > > Methods {
129+ public Dictionary < string , List < JavaMethodInfo > > ? Methods {
130130 get { return LookupMethods ( ) ; }
131131 }
132132
@@ -152,7 +152,7 @@ public void Dispose ()
152152 foreach ( var name in methods . Keys . ToList ( ) ) {
153153 foreach ( var info in methods [ name ] )
154154 info . Dispose ( ) ;
155- methods [ name ] = null ;
155+ methods . Remove ( name ) ;
156156 }
157157 }
158158
@@ -171,7 +171,7 @@ internal static JniObjectReference GetConstructorParameters (JniObjectReference
171171 return JniEnvironment . InstanceMethods . CallObjectMethod ( method , Constructor_getParameterTypes ) ;
172172 }
173173
174- List < JavaConstructorInfo > LookupConstructors ( )
174+ List < JavaConstructorInfo > ? LookupConstructors ( )
175175 {
176176 if ( Members == null )
177177 return null ;
@@ -199,7 +199,7 @@ List<JavaConstructorInfo> LookupConstructors ()
199199 }
200200 }
201201
202- Dictionary < string , List < JavaFieldInfo > > LookupFields ( )
202+ Dictionary < string , List < JavaFieldInfo > > ? LookupFields ( )
203203 {
204204 if ( Members == null )
205205 return null ;
@@ -216,17 +216,18 @@ Dictionary<string, List<JavaFieldInfo>> LookupFields ()
216216 for ( int i = 0 ; i < len ; ++ i ) {
217217 var field = JniEnvironment . Arrays . GetObjectArrayElement ( fields , i ) ;
218218 var n_name = JniEnvironment . InstanceMethods . CallObjectMethod ( field , Field_getName ) ;
219- var name = JniEnvironment . Strings . ToString ( ref n_name , JniObjectReferenceOptions . CopyAndDispose ) ;
220219 var isStatic = IsStatic ( field ) ;
220+ var name = JniEnvironment . Strings . ToString ( ref n_name , JniObjectReferenceOptions . CopyAndDispose ) ??
221+ throw new InvalidOperationException ( $ "Could not determine field name at index { i } !") ;
221222
222- List < JavaFieldInfo > overloads ;
223- if ( ! Fields . TryGetValue ( name , out overloads ) )
224- Fields . Add ( name , overloads = new List < JavaFieldInfo > ( ) ) ;
223+ List < JavaFieldInfo > ? overloads = null ;
224+ if ( ! Fields ? . TryGetValue ( name , out overloads ) ?? false )
225+ Fields ! . Add ( name , overloads = new List < JavaFieldInfo > ( ) ) ;
225226
226227 var n_type = JniEnvironment . InstanceMethods . CallObjectMethod ( field , Field_getType ) ;
227228 using ( var type = new JniType ( ref n_type , JniObjectReferenceOptions . CopyAndDispose ) ) {
228229 var sig = JniTypeSignature . Parse ( type . Name ) ;
229- overloads . Add ( new JavaFieldInfo ( Members , name + "." + sig . QualifiedReference , isStatic ) ) ;
230+ overloads ? . Add ( new JavaFieldInfo ( Members , name + "." + sig . QualifiedReference , isStatic ) ) ;
230231 }
231232
232233 JniObjectReference . Dispose ( ref field ) ;
@@ -239,7 +240,7 @@ Dictionary<string, List<JavaFieldInfo>> LookupFields ()
239240 }
240241 }
241242
242- Dictionary < string , List < JavaMethodInfo > > LookupMethods ( )
243+ Dictionary < string , List < JavaMethodInfo > > ? LookupMethods ( )
243244 {
244245 if ( Members == null )
245246 return null ;
@@ -256,19 +257,20 @@ Dictionary<string, List<JavaMethodInfo>> LookupMethods ()
256257 for ( int i = 0 ; i < len ; ++ i ) {
257258 var method = JniEnvironment . Arrays . GetObjectArrayElement ( methods , i ) ;
258259 var n_name = JniEnvironment . InstanceMethods . CallObjectMethod ( method , Method_getName ) ;
259- var name = JniEnvironment . Strings . ToString ( ref n_name , JniObjectReferenceOptions . CopyAndDispose ) ;
260260 var isStatic = IsStatic ( method ) ;
261+ var name = JniEnvironment . Strings . ToString ( ref n_name , JniObjectReferenceOptions . CopyAndDispose ) ??
262+ throw new InvalidOperationException ( $ "Could not determine method name at index { i } !") ;
261263
262- List < JavaMethodInfo > overloads ;
263- if ( ! Methods . TryGetValue ( name , out overloads ) )
264- Methods . Add ( name , overloads = new List < JavaMethodInfo > ( ) ) ;
264+ List < JavaMethodInfo > ? overloads = null ;
265+ if ( ! Methods ? . TryGetValue ( name , out overloads ) ?? false )
266+ Methods ! . Add ( name , overloads = new List < JavaMethodInfo > ( ) ) ;
265267
266268 var nrt = JniEnvironment . InstanceMethods . CallObjectMethod ( method , Method_getReturnType ) ;
267269 var rt = new JniType ( ref nrt , JniObjectReferenceOptions . CopyAndDispose ) ;
268270 var m = new JavaMethodInfo ( Members , method , name , isStatic ) {
269271 ReturnType = rt ,
270272 } ;
271- overloads . Add ( m ) ;
273+ overloads ? . Add ( m ) ;
272274 JniObjectReference . Dispose ( ref method ) ;
273275 }
274276 } finally {
@@ -286,11 +288,11 @@ static bool IsStatic (JniObjectReference member)
286288 return ( s & JavaModifiers . Static ) == JavaModifiers . Static ;
287289 }
288290
289- internal unsafe bool TryInvokeMember ( IJavaPeerable self , JavaMethodBase [ ] overloads , DynamicMetaObject [ ] args , out object value )
291+ internal unsafe bool TryInvokeMember ( IJavaPeerable self , JavaMethodBase [ ] overloads , DynamicMetaObject [ ] args , out object ? value )
290292 {
291293 value = null ;
292- var vms = ( List < JniValueMarshaler > ) null ;
293- var states = ( JniValueMarshalerState [ ] ) null ;
294+ var vms = ( List < JniValueMarshaler > ? ) null ;
295+ var states = ( JniValueMarshalerState [ ] ? ) null ;
294296
295297 var jtypes = GetJniTypes ( args ) ;
296298 try {
@@ -313,18 +315,20 @@ internal unsafe bool TryInvokeMember (IJavaPeerable self, JavaMethodBase[] overl
313315 }
314316 finally {
315317 for ( int i = 0 ; vms != null && i < vms . Count ; ++ i ) {
318+ if ( states == null ) {
319+ continue ;
320+ }
316321 vms [ i ] . DestroyArgumentState ( args [ i ] . Value , ref states [ i ] ) ;
317322 }
318323 for ( int i = 0 ; i < jtypes . Count ; ++ i ) {
319- if ( jtypes [ i ] != null )
320- jtypes [ i ] . Dispose ( ) ;
324+ jtypes [ i ] ? . Dispose ( ) ;
321325 }
322326 }
323327 }
324328
325- static List < JniType > GetJniTypes ( DynamicMetaObject [ ] args )
329+ static List < JniType ? > GetJniTypes ( DynamicMetaObject [ ] args )
326330 {
327- var r = new List < JniType > ( args . Length ) ;
331+ var r = new List < JniType ? > ( args . Length ) ;
328332 var vm = JniEnvironment . Runtime ;
329333 foreach ( var a in args ) {
330334 try {
0 commit comments