Exemple #1
0
        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();
                    }
                }
            }
        }
Exemple #2
0
 public override void DestroyGenericArgumentState(MyLegacyColor value, ref JniValueMarshalerState state, ParameterAttributes synchronize)
 {
     throw new NotImplementedException();
 }
Exemple #3
0
 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);
        }
Exemple #8
0
 public override void DestroyGenericArgumentState([AllowNull] IJavaObject value, ref JniValueMarshalerState state, ParameterAttributes synchronize)
 {
     throw new NotImplementedException();
 }