diff --git a/src/Mono.Android/Android.Runtime/JNIEnv.cs b/src/Mono.Android/Android.Runtime/JNIEnv.cs index 73530406da5..9cf5207f6af 100644 --- a/src/Mono.Android/Android.Runtime/JNIEnv.cs +++ b/src/Mono.Android/Android.Runtime/JNIEnv.cs @@ -280,52 +280,9 @@ public static IntPtr FindClass (System.Type type) } } - const int nameBufferLength = 1024; - [ThreadStatic] static char[]? nameBuffer; - - static unsafe IntPtr BinaryName (string classname) + public static IntPtr FindClass (string classname) { - int index = classname.IndexOf ('/'); - - if (index == -1) - return NewString (classname); - - int length = classname.Length; - if (length > nameBufferLength) - return NewString (classname.Replace ('/', '.')); - - if (nameBuffer == null) - nameBuffer = new char[nameBufferLength]; - - fixed (char* src = classname, dst = nameBuffer) { - char* src_ptr = src; - char* dst_ptr = dst; - char* end_ptr = src + length; - while (src_ptr < end_ptr) { - *dst_ptr = (*src_ptr == '/') ? '.' : *src_ptr; - src_ptr++; - dst_ptr++; - } - } - return NewString (nameBuffer, length); - } - - public unsafe static IntPtr FindClass (string classname) - { - JniObjectReference local_ref; - - IntPtr native_str = BinaryName (classname); - try { - JniArgumentValue* parameters = stackalloc JniArgumentValue [3] { - new JniArgumentValue (native_str), - new JniArgumentValue (true), - new JniArgumentValue (JNIEnvInit.java_class_loader), - }; - local_ref = JniEnvironment.StaticMethods.CallStaticObjectMethod (Java.Lang.Class.Members.JniPeerType.PeerReference, JNIEnvInit.mid_Class_forName!, parameters); - } finally { - DeleteLocalRef (native_str); - } - + JniObjectReference local_ref = JniEnvironment.Types.FindClass (classname); IntPtr global_ref = NewGlobalRef (local_ref.Handle); JniObjectReference.Dispose (ref local_ref); return global_ref; diff --git a/src/Mono.Android/Android.Runtime/JNIEnvInit.cs b/src/Mono.Android/Android.Runtime/JNIEnvInit.cs index cb1f39a8ec5..2499b693cf2 100644 --- a/src/Mono.Android/Android.Runtime/JNIEnvInit.cs +++ b/src/Mono.Android/Android.Runtime/JNIEnvInit.cs @@ -20,7 +20,6 @@ internal struct JnienvInitializeArgs { public IntPtr grefLoader; public IntPtr Loader_loadClass; public IntPtr grefClass; // TODO: remove, not needed anymore - public IntPtr Class_forName; public uint logCategories; public int version; // TODO: remove, not needed anymore public int grefGcThreshold; @@ -46,7 +45,6 @@ internal struct JnienvInitializeArgs { internal static IntPtr grefIGCUserPeer_class; internal static IntPtr grefGCUserPeerable_class; internal static IntPtr java_class_loader; - internal static JniMethodInfo? mid_Class_forName; internal static JniRuntime? androidRuntime; @@ -100,8 +98,6 @@ internal static unsafe void Initialize (JnienvInitializeArgs* args) MarshalMethodsEnabled = args->marshalMethodsEnabled; java_class_loader = args->grefLoader; - mid_Class_forName = new JniMethodInfo (args->Class_forName, isStatic: true); - BoundExceptionType = (BoundExceptionType)args->ioExceptionType; androidRuntime = new AndroidRuntime (args->env, args->javaVm, args->grefLoader, args->Loader_loadClass, args->jniAddNativeMethodRegistrationAttributePresent != 0); ValueManager = androidRuntime.ValueManager; diff --git a/src/native/mono/monodroid/monodroid-glue-internal.hh b/src/native/mono/monodroid/monodroid-glue-internal.hh index c32882702bb..36c9206e36d 100644 --- a/src/native/mono/monodroid/monodroid-glue-internal.hh +++ b/src/native/mono/monodroid/monodroid-glue-internal.hh @@ -89,7 +89,6 @@ namespace xamarin::android::internal jobject grefLoader; jmethodID Loader_loadClass; jclass grefClass; - jmethodID Class_forName; unsigned int logCategories; int version; int grefGcThreshold; diff --git a/src/native/mono/monodroid/monodroid-glue.cc b/src/native/mono/monodroid/monodroid-glue.cc index 94e4944616c..ebb72718c57 100644 --- a/src/native/mono/monodroid/monodroid-glue.cc +++ b/src/native/mono/monodroid/monodroid-glue.cc @@ -860,7 +860,6 @@ MonodroidRuntime::init_android_runtime (JNIEnv *env, jclass runtimeClass, jobjec init.grefClass = RuntimeUtil::get_class_from_runtime_field (env, runtimeClass, "java_lang_Class", true); Class_getName = env->GetMethodID (init.grefClass, "getName", "()Ljava/lang/String;"); - init.Class_forName = env->GetStaticMethodID (init.grefClass, "forName", "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;"); MonoAssembly *mono_android_assembly;