public Object ObjectCallAutoResolve(string name, params object[] args)
        {
            IntPtr value = ObjectCall(name, GetClass().Replace('.', '/'), args);

            if (value == IntPtr.Zero)
            {
                return(null);
            }

            var clsname = new Object(value).GetClass().GetName();
            var t       = GetCsharpClass(clsname);

            if (t == null)
            {
                return(null);
            }

            ConstructorInfo c = t.GetConstructor(new[] { value.GetType() });

            if (c != null)
            {
                return((Object)c.Invoke(new object[] { value }));
            }
            else
            {
                DebugPrint("Can't instantiate class, probably no constructor with IntPtr arg");
            }

            return(null);
        }
        public static string GetSignature <TReturnType>(object[] args)
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append(GetArgsSignature(args));

            var t = typeof(TReturnType);

            if (t.IsSubclassOf(typeof(JavaObject)))
            {
                // TODO: [optimization]
                using (JavaObject androidJavaObject = new Object(FindClass(GetClass(t))))
                    stringBuilder.Append("L" + androidJavaObject.Call <string>("getName") + ";");
            }
            else
            {
                stringBuilder.Append(AndroidJNIHelper.GetSignature(t));
            }

            string sig = stringBuilder.ToString();

            DebugPrint("GetSignature<" + t.FullName + ">" + ": " + sig);

            return(sig);
        }