public void Dispose_ClearsLocalReferences() { if (!HaveSafeHandles) { Assert.Ignore("SafeHandles aren't used, so magical disposal from a distance isn't supported."); return; } JniObjectReference lref; using (var envp = new JniTransition(JniEnvironment.EnvironmentPointer)) { lref = new JavaObject().PeerReference.NewLocalRef(); Assert.IsTrue(lref.IsValid); } Assert.IsFalse(lref.IsValid); }
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(); } }