internal unsafe bool TryInvokeMember(IJavaPeerable self, JavaMethodBase[] overloads, DynamicMetaObject[] args, out object value) { value = null; var vms = (List <JniValueMarshaler>)null; var states = (JniValueMarshalerState[])null; var jtypes = GetJniTypes(args); try { var matches = overloads.Where(o => (o.IsConstructor || o.IsStatic == (self == null)) && o.CompatibleWith(jtypes, args)); var invoke = matches.FirstOrDefault(); if (invoke == null) { return(false); } var jvm = JniEnvironment.Runtime; vms = args.Select(arg => jvm.ValueManager.GetValueMarshaler(arg.LimitType)).ToList(); states = new JniValueMarshalerState [vms.Count]; for (int i = 0; i < vms.Count; ++i) { states [i] = vms [i].CreateArgumentState(args [i].Value); } var jargs = stackalloc JniArgumentValue [vms.Count]; for (int i = 0; i < states.Length; ++i) { jargs [i] = states [i].JniArgumentValue; } value = invoke.Invoke(self, jargs); return(true); } finally { for (int i = 0; vms != null && i < vms.Count; ++i) { vms [i].DestroyArgumentState(args [i].Value, ref states [i]); } for (int i = 0; i < jtypes.Count; ++i) { if (jtypes [i] != null) { jtypes [i].Dispose(); } } } }
public override void DestroyGenericArgumentState(MyLegacyColor value, ref JniValueMarshalerState state, ParameterAttributes synchronize) { throw new NotImplementedException(); }
public override void DestroyGenericArgumentState(IntPtr value, ref JniValueMarshalerState state, ParameterAttributes synchronize) { throw new NotSupportedException(); }
public override void DestroyGenericArgumentState(DemoValueType value, ref JniValueMarshalerState state, ParameterAttributes synchronize) { Int32Marshaler.DestroyGenericArgumentState(value.Value, ref state, synchronize); }
public override void DestroyArgumentState(object value, ref JniValueMarshalerState state, ParameterAttributes synchronize) { Int32Marshaler.DestroyArgumentState((value as DemoValueType?)?.Value, ref state, synchronize); }
public void DestroyGenericArgumentState() { var s = new JniValueMarshalerState(); marshaler.DestroyGenericArgumentState(default(T), ref s); }
public void DestroyArgumentState() { var s = new JniValueMarshalerState(); marshaler.DestroyArgumentState(null, ref s); }
public override void DestroyGenericArgumentState([AllowNull] IJavaObject value, ref JniValueMarshalerState state, ParameterAttributes synchronize) { throw new NotImplementedException(); }