public override void CreatedLocalReference(JniObjectReference value, ref int localReferenceCount) { base.CreatedLocalReference (value, ref localReferenceCount); if (Logger.LogLocalRef) { var tname = Thread.CurrentThread.Name; var tid = Thread.CurrentThread.ManagedThreadId;; var from = new StringBuilder (new StackTrace (true).ToString ()); JNIEnv._monodroid_lref_log_new (localReferenceCount, value.Handle, (byte) 'L', tname, tid, from, 1); } }
public override IntPtr ReleaseLocalReference(ref JniObjectReference value, ref int localReferenceCount) { var r = base.ReleaseLocalReference(ref value, ref localReferenceCount); if (Logger.LogLocalRef) { var tname = Thread.CurrentThread.Name; var tid = Thread.CurrentThread.ManagedThreadId;; var from = new StringBuilder(new StackTrace(true).ToString()); JNIEnv._monodroid_lref_log_delete(localReferenceCount - 1, value.Handle, (byte)'L', tname, tid, from, 1); } return(r); }
public override Exception GetExceptionForThrowable(ref JniObjectReference value, JniObjectReferenceOptions transfer) { var throwable = Java.Lang.Object.GetObject <Java.Lang.Throwable>(value.Handle, JniHandleOwnership.DoNotTransfer); JniObjectReference.Dispose(ref value, transfer); var p = throwable as JavaProxyThrowable; if (p != null) { return(p.InnerException); } return(throwable); }
public PdfWriteResultCallback(PDFToHtml _pDFToHtml) : base(IntPtr.Zero, JniHandleOwnership.DoNotTransfer) { if (!(Handle != IntPtr.Zero)) { unsafe { JniObjectReference val = JniPeerMembers.InstanceMethods.StartCreateInstance("()V", GetType(), null); SetHandle(val.Handle, JniHandleOwnership.TransferLocalRef); JniPeerMembers.InstanceMethods.FinishCreateInstance("()V", this, null); } } pDFToHtml = _pDFToHtml; }
static Delegate GetInt32ValueHandler() { Func <IntPtr, IntPtr, int> h = (jnienv, n_self) => { var r_self = new JniObjectReference(n_self); var self = JniEnvironment.Runtime.ValueManager.GetValue <TestType>(ref r_self, JniObjectReferenceOptions.CopyAndDoNotRegister); try { return(self.GetInt32Value()); } finally { self.DisposeUnlessReferenced(); } }; return(JniEnvironment.Runtime.MarshalMemberBuilder.CreateMarshalToManagedDelegate(h)); }
public void PeekValue() { JniObjectReference lref; using (var o = new JavaObject()) { lref = o.PeerReference.NewLocalRef(); Assert.AreSame(o, JniRuntime.CurrentRuntime.ValueManager.PeekValue(lref)); } // At this point, the Java-side object is kept alive by `lref`, // but the wrapper instance has been disposed, and thus should // be unregistered, and thus unfindable. Assert.IsNull(JniRuntime.CurrentRuntime.ValueManager.PeekValue(lref)); JniObjectReference.Dispose(ref lref); }
public unsafe void Types_IsSameObject() { using (var t = new JniType("java/lang/Object")) { var c = t.GetConstructor("()V"); var o = t.NewObject(c, null); try { using (var ot = JniEnvironment.Types.GetTypeFromInstance(o)) { Assert.IsTrue(JniEnvironment.Types.IsSameObject(t.PeerReference, ot.PeerReference)); } } finally { JniObjectReference.Dispose(ref o); } } }
public PdfWriteResultCallback(TaskCompletionSource <ToFileResult> taskCompletionSource, string path) : base(IntPtr.Zero, JniHandleOwnership.DoNotTransfer) { if (!(Handle != IntPtr.Zero)) { unsafe { JniObjectReference val = JniPeerMembers.InstanceMethods.StartCreateInstance("()V", GetType(), null); SetHandle(val.Handle, JniHandleOwnership.TransferLocalRef); JniPeerMembers.InstanceMethods.FinishCreateInstance("()V", this, null); } } _taskCompletionSource = taskCompletionSource; _path = path; }
public override JniObjectReference CreateWeakGlobalReference(JniObjectReference value) { var r = base.CreateWeakGlobalReference (value); var log = Logger.LogGlobalRef; var ctype = log ? GetObjectRefType (value.Type) : (byte) '*'; var ntype = log ? GetObjectRefType (r.Type) : (byte) '*'; var tname = log ? Thread.CurrentThread.Name : null; var tid = log ? Thread.CurrentThread.ManagedThreadId : 0; var from = log ? new StringBuilder (new StackTrace (true).ToString ()) : null; JNIEnv._monodroid_weak_gref_new (value.Handle, ctype, r.Handle, ntype, tname, tid, from, 1); return r; }
public void Ctor_Exceptions() { var r = new JniObjectReference(); Assert.Throws <ArgumentException> (() => new JavaObject(ref r, JniObjectReferenceOptions.CopyAndDispose)); // Note: This may break if/when JavaVM provides "default" Assert.Throws <NotSupportedException> (() => new JavaObjectWithNoJavaPeer()); #if __ANDROID__ Assert.Throws <Java.Lang.ClassNotFoundException> (() => new JavaObjectWithMissingJavaPeer()).Dispose(); #else // !__ANDROID__ Assert.Throws <JavaException> (() => new JavaObjectWithMissingJavaPeer()).Dispose(); #endif // !__ANDROID__ }
protected static object ToReturnValue(ref JniObjectReference handle, string signature, int n) { var instance = JniEnvironment.Runtime.ValueManager.GetValue <IJavaPeerable> (ref handle, JniObjectReferenceOptions.CopyAndDispose); switch (signature [n]) { case 'L': return(new DynamicJavaInstance(instance)); case '[': default: return(instance); } }
public static unsafe void Main(string[] args) { Console.WriteLine("Hello World!"); try { var ignore = JniRuntime.CurrentRuntime; } catch (InvalidOperationException e) { Console.WriteLine(e); } foreach (var h in JniRuntime.GetAvailableInvocationPointers()) { Console.WriteLine("PRE: GetCreatedJavaVMHandles: {0}", h); } Console.WriteLine("Part 2!"); using (var vm = new JreRuntimeOptions().CreateJreVM()) { Console.WriteLine("# JniEnvironment.EnvironmentPointer={0}", JniEnvironment.EnvironmentPointer); Console.WriteLine("vm.SafeHandle={0}", vm.InvocationPointer); var t = new JniType("java/lang/Object"); var c = t.GetConstructor("()V"); var o = t.NewObject(c, null); var m = t.GetInstanceMethod("hashCode", "()I"); int i = JniEnvironment.InstanceMethods.CallIntMethod(o, m); Console.WriteLine("java.lang.Object={0}", o); Console.WriteLine("hashcode={0}", i); JniObjectReference.Dispose(ref o); t.Dispose(); // var o = JniTypes.FindClass ("java/lang/Object"); /* * var waitForCreation = new CountdownEvent (1); * var exitThread = new CountdownEvent (1); * var t = new Thread (() => { * var vm2 = new JavaVMBuilder ().CreateJavaVM (); * waitForCreation.Signal (); * exitThread.Wait (); * }); * t.Start (); * waitForCreation.Wait (); */ foreach (var h in JniRuntime.GetAvailableInvocationPointers()) { Console.WriteLine("WITHIN: GetCreatedJavaVMs: {0}", h); } // exitThread.Signal (); } foreach (var h in JniRuntime.GetAvailableInvocationPointers()) { Console.WriteLine("POST: GetCreatedJavaVMs: {0}", h); } }
static bool _EqualsThis(IntPtr jnienv, IntPtr n_self, IntPtr n_value) { var jvm = JniEnvironment.Runtime; var r_self = new JniObjectReference(n_self); var self = jvm.ValueManager.GetValue <TestType>(ref r_self, JniObjectReferenceOptions.CopyAndDoNotRegister); var r_value = new JniObjectReference(n_self); var value = jvm.ValueManager.GetValue <IJavaPeerable> (ref r_value, JniObjectReferenceOptions.CopyAndDoNotRegister); try { return(self.EqualsThis(value)); } finally { self.DisposeUnlessReferenced(); value.DisposeUnlessReferenced(); } }
public override JniObjectReference CreateWeakGlobalReference(JniObjectReference value) { var r = base.CreateWeakGlobalReference(value); var log = Logger.LogGlobalRef; var ctype = log ? GetObjectRefType(value.Type) : (byte)'*'; var ntype = log ? GetObjectRefType(r.Type) : (byte)'*'; var tname = log ? Thread.CurrentThread.Name : null; var tid = log ? Thread.CurrentThread.ManagedThreadId : 0; var from = log ? new StringBuilder(new StackTrace(true).ToString()) : null; JNIEnv._monodroid_weak_gref_new(value.Handle, ctype, r.Handle, ntype, tname, tid, from, 1); return(r); }
Dictionary <string, List <JavaMethodInfo> > LookupMethods() { if (Members == null) { return(null); } lock (Members) { if (this.methods != null || Disposed) { return(this.methods); } this.methods = new Dictionary <string, List <JavaMethodInfo> > (); var methods = JniEnvironment.InstanceMethods.CallObjectMethod(Members.JniPeerType.PeerReference, Class_getMethods); try { int len = JniEnvironment.Arrays.GetArrayLength(methods); for (int i = 0; i < len; ++i) { var method = JniEnvironment.Arrays.GetObjectArrayElement(methods, i); var n_name = JniEnvironment.InstanceMethods.CallObjectMethod(method, Method_getName); var name = JniEnvironment.Strings.ToString(ref n_name, JniObjectReferenceOptions.CopyAndDispose); var isStatic = IsStatic(method); List <JavaMethodInfo> overloads; if (!Methods.TryGetValue(name, out overloads)) { Methods.Add(name, overloads = new List <JavaMethodInfo> ()); } var nrt = JniEnvironment.InstanceMethods.CallObjectMethod(method, Method_getReturnType); var rt = new JniType(ref nrt, JniObjectReferenceOptions.CopyAndDispose); var m = new JavaMethodInfo(Members, method, name, isStatic) { ReturnType = rt, }; overloads.Add(m); JniObjectReference.Dispose(ref method); } } finally { JniObjectReference.Dispose(ref methods); } return(this.methods); } }
public void OnPictureTaken(JniObjectReference data, Camera camera) { Console.WriteLine($"# jonp: data: {data.ToString ()}"); int length = JniEnvironment.Arrays.GetArrayLength(data); if (length == 0) { return; } // Note use of `unsafe` code to obtain the underlying Java bytes // without copying the entire array between VMs. unsafe { sbyte *bytes = JniEnvironment.Arrays.GetByteArrayElements(data, isCopy: null); JniEnvironment.Arrays.ReleaseByteArrayElements(data, bytes, 0); } }
Dictionary <string, List <JavaFieldInfo> > LookupFields() { if (Members == null) { return(null); } lock (Members) { if (this.fields != null || Disposed) { return(this.fields); } this.fields = new Dictionary <string, List <JavaFieldInfo> > (); var fields = JniEnvironment.InstanceMethods.CallObjectMethod(Members.JniPeerType.PeerReference, Class_getFields); try { int len = JniEnvironment.Arrays.GetArrayLength(fields); for (int i = 0; i < len; ++i) { var field = JniEnvironment.Arrays.GetObjectArrayElement(fields, i); var n_name = JniEnvironment.InstanceMethods.CallObjectMethod(field, Field_getName); var name = JniEnvironment.Strings.ToString(ref n_name, JniObjectReferenceOptions.CopyAndDispose); var isStatic = IsStatic(field); List <JavaFieldInfo> overloads; if (!Fields.TryGetValue(name, out overloads)) { Fields.Add(name, overloads = new List <JavaFieldInfo> ()); } var n_type = JniEnvironment.InstanceMethods.CallObjectMethod(field, Field_getType); using (var type = new JniType(ref n_type, JniObjectReferenceOptions.CopyAndDispose)) { var sig = JniTypeSignature.Parse(type.Name); overloads.Add(new JavaFieldInfo(Members, name + "." + sig.QualifiedReference, isStatic)); } JniObjectReference.Dispose(ref field); } } finally { JniObjectReference.Dispose(ref fields); } return(this.fields); } }
static IntPtr GetStringValueHandler(IntPtr jnienv, IntPtr n_self, int value) { var r_self = new JniObjectReference(n_self); var self = JniEnvironment.Runtime.ValueManager.GetValue <TestType>(ref r_self, JniObjectReferenceOptions.CopyAndDoNotRegister); try { var s = self.GetStringValue(value); var r = JniEnvironment.Strings.NewString(s); try { return(JniEnvironment.References.NewReturnToJniRef(r)); } finally { JniObjectReference.Dispose(ref r); } } finally { self.DisposeUnlessReferenced(); } }
public unsafe void Handles_NewReturnToJniRef() { using (var t = new JniType("java/lang/Object")) { var c = t.GetConstructor("()V"); var o = t.NewObject(c, null); try { var n = o.NewLocalRef(); JniObjectReference.Dispose(ref n); // warning: lref 'leak' var r = JniEnvironment.References.NewReturnToJniRef(o); var h = new JniObjectReference(r); Assert.AreEqual(JniEnvironment.References.GetIdentityHashCode(o), JniEnvironment.References.GetIdentityHashCode(h)); } finally { JniObjectReference.Dispose(ref o); } } }
static void CalledFromConstructorHandler(IntPtr jnienv, IntPtr n_self, int value) { var envp = new JniTransition(jnienv); try { var r_self = new JniObjectReference(n_self); var self = JniEnvironment.Runtime.ValueManager.GetValue <CallVirtualFromConstructorDerived>(ref r_self, JniObjectReferenceOptions.Copy); self.CalledFromConstructor(value); self.DisposeUnlessReferenced(); } catch (Exception e) when(JniEnvironment.Runtime.ExceptionShouldTransitionToJni(e)) { envp.SetPendingException(e); } finally { envp.Dispose(); } }
public override JniObjectReference CreateGlobalReference(JniObjectReference value) { var r = base.CreateGlobalReference (value); var log = Logger.LogGlobalRef; var ctype = log ? GetObjectRefType (value.Type) : (byte) '*'; var ntype = log ? GetObjectRefType (r.Type) : (byte) '*'; var tname = log ? Thread.CurrentThread.Name : null; var tid = log ? Thread.CurrentThread.ManagedThreadId : 0; var from = log ? new StringBuilder (new StackTrace (true).ToString ()) : null; int gc = JNIEnv._monodroid_gref_log_new (value.Handle, ctype, r.Handle, ntype, tname, tid, from, 1); if (gc >= JNIEnv.gref_gc_threshold) { Logger.Log (LogLevel.Info, "monodroid-gc", gc + " outstanding GREFs. Performing a full GC!"); System.GC.Collect (); } return r; }
private void Dispose(bool disposing) { if (!_javaRef.IsValid) { return; } unsafe { // tell Java that we're done with this array JniEnvironment.Arrays.ReleaseByteArrayElements(_javaRef, (sbyte *)Raw, JniReleaseArrayElementsMode.Default); } if (disposing) { JniObjectReference.Dispose(ref _javaRef); } }
public void UnreferencedInstanceIsCollected() { JniObjectReference oldHandle = new JniObjectReference(); WeakReference r = null; FinalizerHelpers.PerformNoPinAction(() => { var v = new JavaObject(); oldHandle = v.PeerReference.NewWeakGlobalRef(); r = new WeakReference(v); }); JniEnvironment.Runtime.ValueManager.CollectPeers(); GC.WaitForPendingFinalizers(); GC.WaitForPendingFinalizers(); Assert.IsFalse(r.IsAlive); Assert.IsNull(r.Target); Assert.IsNull(JniRuntime.CurrentRuntime.ValueManager.PeekValue(oldHandle)); JniObjectReference.Dispose(ref oldHandle); }
public AndroidRuntimeOptions(IntPtr jnienv, IntPtr vm, bool allocNewObjectSupported, IntPtr classLoader, IntPtr classLoader_loadClass, bool jniAddNativeMethodRegistrationAttributePresent) { EnvironmentPointer = jnienv; ClassLoader = new JniObjectReference(classLoader, JniObjectReferenceType.Global); ClassLoader_LoadClass_id = classLoader_loadClass; InvocationPointer = vm; NewObjectRequired = !allocNewObjectSupported; ObjectReferenceManager = new AndroidObjectReferenceManager(); TypeManager = new AndroidTypeManager(jniAddNativeMethodRegistrationAttributePresent); ValueManager = new AndroidValueManager(); UseMarshalMemberBuilder = false; JniAddNativeMethodRegistrationAttributePresent = jniAddNativeMethodRegistrationAttributePresent; }
unsafe TimeSpan GetJIMethodCallTiming() { using (var k = new JniType("java/lang/Object")) { var c = k.GetConstructor("()V"); var o = k.NewObject(c, null); var t = k.GetInstanceMethod("toString", "()Ljava/lang/String;"); var sw = Stopwatch.StartNew(); for (int i = 0; i < Unified_ToString_Iterations; ++i) { var r = JniEnvironment.InstanceMethods.CallObjectMethod(o, t); JniObjectReference.Dispose(ref r); } sw.Stop(); JniObjectReference.Dispose(ref o); return(sw.Elapsed); } }
bool ShouldReplaceMapping(WeakReference <IJavaPeerable> current, JniObjectReference reference, out IJavaPeerable?target) { target = null; if (current == null) { return(true); } // Target has been GC'd; see also FIXME, above, in finalizer if (!current.TryGetTarget(out target) || target == null) { return(true); } // It's possible that the instance was GC'd, but the finalizer // hasn't executed yet, so the `instances` entry is stale. if (!target.PeerReference.IsValid) { return(true); } if (!JniEnvironment.Types.IsSameObject(target.PeerReference, reference)) { return(false); } // JNIEnv.NewObject/JNIEnv.CreateInstance() compatibility. // When two MCW's are created for one Java instance [0], // we want the 2nd MCW to replace the 1st, as the 2nd is // the one the dev created; the 1st is an implicit intermediary. // // [0]: If Java ctor invokes overridden virtual method, we'll // transition into managed code w/o a registered instance, and // thus will create an "intermediary" via // (IntPtr, JniHandleOwnership) .ctor. if ((target.JniManagedPeerState & JniManagedPeerStates.Replaceable) == JniManagedPeerStates.Replaceable) { return(true); } return(false); }
public void UnregisterFromRuntime() { int registeredCount = JniRuntime.CurrentRuntime.ValueManager.GetSurfacedPeers().Count; JniObjectReference l; JavaObject o; using (o = new JavaObject()) { l = o.PeerReference.NewLocalRef(); Assert.AreEqual(JniObjectReferenceType.Global, o.PeerReference.Type); Assert.AreEqual(registeredCount + 1, JniRuntime.CurrentRuntime.ValueManager.GetSurfacedPeers().Count); Assert.IsNotNull(JniRuntime.CurrentRuntime.ValueManager.PeekValue(l)); Assert.AreNotSame(l, o.PeerReference); Assert.AreSame(o, JniRuntime.CurrentRuntime.ValueManager.PeekValue(l)); } Assert.AreEqual(registeredCount, JniRuntime.CurrentRuntime.ValueManager.GetSurfacedPeers().Count); Assert.IsNull(JniRuntime.CurrentRuntime.ValueManager.PeekValue(l)); JniObjectReference.Dispose(ref l); Assert.Throws <ObjectDisposedException> (() => o.UnregisterFromRuntime()); }
public static unsafe TokenizationResult CreateTokenizationResult(global::Android.Content.Intent p0) { const string id = "createTokenizationResult.(Landroid/content/Intent;)Lru/yandex/money/android/sdk/TokenizationResult;"; JniArgumentValue *args = stackalloc JniArgumentValue[1]; args[0] = new JniArgumentValue(p0?.Handle ?? IntPtr.Zero); JniObjectReference rm = default; try { rm = _members.StaticMethods.InvokeObjectMethod(id, args); } catch (Java.Lang.IllegalArgumentException e) { Console.WriteLine(e); //throw; } return(GetObject <TokenizationResult>(rm.Handle, JniHandleOwnership.TransferLocalRef)); }
public unsafe void Sanity() { using (var Integer_class = new JniType("java/lang/Integer")) { Assert.AreEqual("java/lang/Integer", Integer_class.Name); var ctor_args = stackalloc JniArgumentValue [1]; ctor_args [0] = new JniArgumentValue(42); var Integer_ctor = Integer_class.GetConstructor("(I)V"); var Integer_intValue = Integer_class.GetInstanceMethod("intValue", "()I"); var o = Integer_class.NewObject(Integer_ctor, ctor_args); try { int v = JniEnvironment.InstanceMethods.CallIntMethod(o, Integer_intValue); Assert.AreEqual(42, v); } finally { JniObjectReference.Dispose(ref o); } } }
static Delegate GetEqualsThisHandler() { Func <IntPtr, IntPtr, IntPtr, bool> h = (jnienv, n_self, n_value) => { var jvm = JniEnvironment.Runtime; var r_self = new JniObjectReference(n_self); var self = jvm.ValueManager.GetValue <TestType>(ref r_self, JniObjectReferenceOptions.CopyAndDoNotRegister); var r_value = new JniObjectReference(n_self); var value = jvm.ValueManager.GetValue <IJavaPeerable> (ref r_value, JniObjectReferenceOptions.CopyAndDoNotRegister); try { return(self.EqualsThis(value)); } finally { self.DisposeUnlessReferenced(); value.DisposeUnlessReferenced(); } }; return(JniEnvironment.Runtime.MarshalMemberBuilder.CreateMarshalToManagedDelegate(h)); }
public void LookupArguments() { if (arguments != null) { return; } var vm = JniEnvironment.Runtime; var sb = new StringBuilder(); var mgr = vm.TypeManager; if (!IsConstructor) { sb.Append(Name).Append("."); } sb.Append("("); var parameters = IsConstructor ? JavaClassInfo.GetConstructorParameters(PeerReference) : JavaClassInfo.GetMethodParameters(PeerReference); try { int len = JniEnvironment.Arrays.GetArrayLength(parameters); arguments = new List <JniObjectReference> (len); for (int i = 0; i < len; ++i) { var p = JniEnvironment.Arrays.GetObjectArrayElement(parameters, i); try { var sig = JniTypeSignature.Parse(JniEnvironment.Types.GetJniTypeNameFromClass(p)); sb.Append(sig.QualifiedReference); arguments.Add(p.NewGlobalRef()); } finally { JniObjectReference.Dispose(ref p); } } } finally { JniObjectReference.Dispose(ref parameters); } sb.Append(")").Append(JniReturnType); JniSignature = sb.ToString(); }
public override JniObjectReference CreateGlobalReference(JniObjectReference value) { var r = base.CreateGlobalReference(value); var log = Logger.LogGlobalRef; var ctype = log ? GetObjectRefType(value.Type) : (byte)'*'; var ntype = log ? GetObjectRefType(r.Type) : (byte)'*'; var tname = log ? Thread.CurrentThread.Name : null; var tid = log ? Thread.CurrentThread.ManagedThreadId : 0; var from = log ? new StringBuilder(new StackTrace(true).ToString()) : null; int gc = JNIEnv._monodroid_gref_log_new(value.Handle, ctype, r.Handle, ntype, tname, tid, from, 1); if (gc >= JNIEnv.gref_gc_threshold) { Logger.Log(LogLevel.Info, "monodroid-gc", gc + " outstanding GREFs. Performing a full GC!"); System.GC.Collect(); } return(r); }
/// <summary> /// Creates a FastJavaByteArray wrapper around an existing Java/JNI byte array /// </summary> /// <param name="handle">Native Java array handle</param> /// <param name="readOnly">Whether to consider this byte array read-only</param> public FastJavaByteArray(IntPtr handle, bool readOnly = true) { if (handle == IntPtr.Zero) { throw new ArgumentNullException("handle"); } IsReadOnly = readOnly; // Retain a global reference to the byte array. _javaRef = new JniObjectReference(handle).NewGlobalRef(); Count = JniEnvironment.Arrays.GetArrayLength(_javaRef); bool isCopy = false; unsafe { // Get a pinned pointer to the byte array using the global Handle Raw = (byte *)JniEnvironment.Arrays.GetByteArrayElements(_javaRef, &isCopy); } }
public override IntPtr ReleaseLocalReference(ref JniObjectReference value, ref int localReferenceCount) { var r = base.ReleaseLocalReference (ref value, ref localReferenceCount); if (Logger.LogLocalRef) { var tname = Thread.CurrentThread.Name; var tid = Thread.CurrentThread.ManagedThreadId;; var from = new StringBuilder (new StackTrace (true).ToString ()); JNIEnv._monodroid_lref_log_delete (localReferenceCount-1, value.Handle, (byte) 'L', tname, tid, from, 1); } return r; }
public override Exception GetExceptionForThrowable(ref JniObjectReference value, JniObjectReferenceOptions transfer) { var throwable = Java.Lang.Object.GetObject<Java.Lang.Throwable>(value.Handle, JniHandleOwnership.DoNotTransfer); JniObjectReference.Dispose (ref value, transfer); var p = throwable as JavaProxyThrowable; if (p != null) return p.InnerException; return throwable; }
public override void RaisePendingException(Exception pendingException) { var je = pendingException as JavaProxyThrowable; if (je == null) { je = new JavaProxyThrowable (pendingException); } var r = new JniObjectReference (je.Handle); JniEnvironment.Exceptions.Throw (r); }
public AndroidRuntimeOptions(IntPtr jnienv, IntPtr vm, bool allocNewObjectSupported, IntPtr classLoader, IntPtr classLoader_loadClass) { EnvironmentPointer = jnienv; ClassLoader = new JniObjectReference (classLoader, JniObjectReferenceType.Global); ClassLoader_LoadClass_id= classLoader_loadClass; InvocationPointer = vm; NewObjectRequired = !allocNewObjectSupported; ObjectReferenceManager = new AndroidObjectReferenceManager (); TypeManager = new AndroidTypeManager (); }
public override void DeleteGlobalReference(ref JniObjectReference value) { var log = Logger.LogGlobalRef; var ctype = log ? GetObjectRefType (value.Type) : (byte) '*'; var tname = log ? Thread.CurrentThread.Name : null; var tid = log ? Thread.CurrentThread.ManagedThreadId : 0; var from = log ? new StringBuilder (new StackTrace (true).ToString ()) : null; JNIEnv._monodroid_gref_log_delete (value.Handle, ctype, tname, tid, from, 1); base.DeleteGlobalReference (ref value); }
void IJavaPeerable.SetPeerReference (JniObjectReference reference) { this.handle = reference.Handle; this.handle_type = (JObjectRefType) reference.Type; }