Пример #1
0
        static Func <IntPtr, JniHandleOwnership, object> GetJniHandleConverter(Type target)
        {
            if (target == null)
            {
                return(null);
            }

            Func <IntPtr, JniHandleOwnership, object> converter;

            if (JniHandleConverters.TryGetValue(target, out converter))
            {
                return(converter);
            }
            if (target.IsArray)
            {
                return((h, t) => JNIEnv.GetArray(h, t, target.GetElementType()));
            }
            if (target.IsGenericType && target.GetGenericTypeDefinition() == typeof(IDictionary <,>))
            {
                Type t = typeof(JavaDictionary <,>).MakeGenericType(target.GetGenericArguments());
                return(GetJniHandleConverterForType(t));
            }
            if (typeof(IDictionary).IsAssignableFrom(target))
            {
                return((h, t) => JavaDictionary.FromJniHandle(h, t));
            }
            if (target.IsGenericType && target.GetGenericTypeDefinition() == typeof(IList <>))
            {
                Type t = typeof(JavaList <>).MakeGenericType(target.GetGenericArguments());
                return(GetJniHandleConverterForType(t));
            }
            if (typeof(IList).IsAssignableFrom(target))
            {
                return((h, t) => JavaList.FromJniHandle(h, t));
            }
            if (target.IsGenericType && target.GetGenericTypeDefinition() == typeof(ICollection <>))
            {
                Type t = typeof(JavaCollection <>).MakeGenericType(target.GetGenericArguments());
                return(GetJniHandleConverterForType(t));
            }
            if (typeof(ICollection).IsAssignableFrom(target))
            {
                return((h, t) => JavaCollection.FromJniHandle(h, t));
            }

            return(null);
        }
Пример #2
0
        public override unsafe IDictionary <string, global::CZ.Msebera.Android.Httpclient.IHeader> GetChallenges(global::CZ.Msebera.Android.Httpclient.HttpHost p0, global::CZ.Msebera.Android.Httpclient.IHttpResponse p1, global::CZ.Msebera.Android.Httpclient.Protocol.IHttpContext p2)
        {
            if (id_getChallenges_Lcz_msebera_android_httpclient_HttpHost_Lcz_msebera_android_httpclient_HttpResponse_Lcz_msebera_android_httpclient_protocol_HttpContext_ == IntPtr.Zero)
            {
                id_getChallenges_Lcz_msebera_android_httpclient_HttpHost_Lcz_msebera_android_httpclient_HttpResponse_Lcz_msebera_android_httpclient_protocol_HttpContext_ = JNIEnv.GetMethodID(class_ref, "getChallenges", "(Lcz/msebera/android/httpclient/HttpHost;Lcz/msebera/android/httpclient/HttpResponse;Lcz/msebera/android/httpclient/protocol/HttpContext;)Ljava/util/Map;");
            }
            try
            {
                JValue *__args = stackalloc JValue[3];
                __args[0] = new JValue(p0);
                __args[1] = new JValue(p1);
                __args[2] = new JValue(p2);

                IDictionary <string, global::CZ.Msebera.Android.Httpclient.IHeader> __ret;
                if (((object)this).GetType() == ThresholdType)
                {
                    __ret = (IDictionary <string, global::CZ.Msebera.Android.Httpclient.IHeader>)JavaDictionary.FromJniHandle(JNIEnv.CallObjectMethod(Handle, id_getChallenges_Lcz_msebera_android_httpclient_HttpHost_Lcz_msebera_android_httpclient_HttpResponse_Lcz_msebera_android_httpclient_protocol_HttpContext_, __args), JniHandleOwnership.TransferLocalRef);
                }
                else
                {
                    __ret = (IDictionary <string, global::CZ.Msebera.Android.Httpclient.IHeader>)JavaDictionary.FromJniHandle(JNIEnv.CallNonvirtualObjectMethod(Handle, ThresholdClass, JNIEnv.GetMethodID(ThresholdClass, "getChallenges", "(Lcz/msebera/android/httpclient/HttpHost;Lcz/msebera/android/httpclient/HttpResponse;Lcz/msebera/android/httpclient/protocol/HttpContext;)Ljava/util/Map;"), __args), JniHandleOwnership.TransferLocalRef);
                }
                return(__ret);
            }
            finally
            {
            }
        }