ConstructorInfo GetPeerConstructor(JniObjectReference instance, Type fallbackType) { var klass = JniEnvironment.Types.GetObjectClass(instance); var jniTypeName = JniEnvironment.Types.GetJniTypeNameFromClass(klass); Type type = null; while (jniTypeName != null) { type = Runtime.TypeManager.GetType(JniTypeSignature.Parse(jniTypeName)); if (type != null) { var ctor = GetActivationConstructor(type); if (ctor != null) { JniObjectReference.Dispose(ref klass); return(ctor); } } var super = JniEnvironment.Types.GetSuperclass(klass); jniTypeName = super.IsValid ? JniEnvironment.Types.GetJniTypeNameFromClass(super) : null; JniObjectReference.Dispose(ref klass, JniObjectReferenceOptions.CopyAndDispose); klass = super; } JniObjectReference.Dispose(ref klass, JniObjectReferenceOptions.CopyAndDispose); return(GetActivationConstructor(fallbackType)); }
internal Type GetRuntimeType(JniObjectReference reference) { var signature = JniTypeSignature.Parse(JniEnvironment.Types.GetJniTypeNameFromInstance(reference)); return(Runtime.TypeManager.GetType(signature)); }