Skip to content

Commit 09baa52

Browse files
authored
[Mono.Android] Remove more LINQ usage (dotnet#5443)
Context: dotnet#5442 Apk size of BuildReleaseArm64False/net6 comparison: apkdiff --bs -e dll$ before.apk after.apk Size difference in bytes ([*1] apk1 only, [*2] apk2 only): + 274 assemblies/Mono.Android.dll Type Android.Runtime.AndroidTypeManager - 42 Method System.Collections.Generic.IEnumerable`1<System.Type> GetTypesForSimpleReference (string) - 33 Method public void RegisterNativeMembers (Java.Interop.JniType, System.Type, string) + Method System.Collections.Generic.IEnumerable`1<System.Type> <>n__0 (string) - Type <>c__DisplayClass11_0 - Type <>c__DisplayClass11_1 + Type <GetTypesForSimpleReference>d__2 - 67 assemblies/System.Private.CoreLib.dll Type System.Array - Method public static void Fill (!!T[], !!T) - 424 assemblies/System.Linq.dll Type System.Linq.Enumerable - Method public static System.Collections.Generic.IEnumerable`1<!!TResult> Repeat (!!TResult, int) - Type RepeatIterator`1<TResult> Type System.Linq.ThrowHelper - Method static void ThrowArgumentOutOfRangeException (System.Linq.ExceptionArgument) Summary: - 217 Assemblies -0.03% (of 782,054)
1 parent e88cfbc commit 09baa52

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/Mono.Android/Android.Runtime/AndroidRuntime.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,12 @@ public AndroidTypeManager (bool jniAddNativeMethodRegistrationAttributePresent)
246246

247247
protected override IEnumerable<Type> GetTypesForSimpleReference (string jniSimpleReference)
248248
{
249+
foreach (var ti in base.GetTypesForSimpleReference (jniSimpleReference))
250+
yield return ti;
251+
249252
var t = Java.Interop.TypeManager.GetJavaToManagedType (jniSimpleReference);
250-
if (t == null)
251-
return base.GetTypesForSimpleReference (jniSimpleReference);
252-
return base.GetTypesForSimpleReference (jniSimpleReference)
253-
.Concat (Enumerable.Repeat (t, 1));
253+
if (t != null)
254+
yield return t;
254255
}
255256

256257
protected override string? GetSimpleReference (Type type)
@@ -395,7 +396,13 @@ public override void RegisterNativeMembers (JniType nativeClass, Type type, stri
395396
Delegate callback;
396397
if (toks [2] == "__export__") {
397398
var mname = toks [0].Substring (2);
398-
var minfo = type.GetMethods (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static).Where (m => m.Name == mname && JavaNativeTypeManager.GetJniSignature (m) == toks [1]).FirstOrDefault ();
399+
MethodInfo? minfo = null;
400+
foreach (var mi in type.GetMethods (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static))
401+
if (mi.Name == mname && JavaNativeTypeManager.GetJniSignature (mi) == toks [1]) {
402+
minfo = mi;
403+
break;
404+
}
405+
399406
if (minfo == null)
400407
throw new InvalidOperationException (String.Format ("Specified managed method '{0}' was not found. Signature: {1}", mname, toks [1]));
401408
callback = CreateDynamicCallback (minfo);

0 commit comments

Comments
 (0)