예제 #1
0
        internal static void RegisterInstance(IJavaObject instance, IntPtr value, JniHandleOwnership transfer, out IntPtr handle)
        {
            if (value == IntPtr.Zero)
            {
                handle = value;
                return;
            }

            var transferType = transfer & (JniHandleOwnership.DoNotTransfer | JniHandleOwnership.TransferLocalRef | JniHandleOwnership.TransferGlobalRef);

            switch (transferType)
            {
            case JniHandleOwnership.DoNotTransfer:
                handle = JNIEnv.NewGlobalRef(value);
                break;

            case JniHandleOwnership.TransferLocalRef:
                handle = JNIEnv.NewGlobalRef(value);
                JNIEnv.DeleteLocalRef(value);
                break;

            case JniHandleOwnership.TransferGlobalRef:
                handle = value;
                break;

            default:
                throw new ArgumentOutOfRangeException("transfer", transfer,
                                                      "Invalid `transfer` value: " + transfer + " on type " + instance.GetType());
            }
            if (handle == IntPtr.Zero)
            {
                throw new InvalidOperationException("Unable to allocate Global Reference for object '" + instance.ToString() + "'!");
            }

            IntPtr key = JNIEnv.IdentityHash(handle);

            if ((transfer & JniHandleOwnership.DoNotRegister) == 0)
            {
                _RegisterInstance(instance, key, handle);
            }
            var ex = instance as IJavaObjectEx;

            if (ex != null)
            {
                ex.KeyHandle = key;
            }

            if (Logger.LogGlobalRef)
            {
                JNIEnv._monodroid_gref_log("handle 0x" + handle.ToString("x") +
                                           "; key_handle 0x" + key.ToString("x") +
                                           ": Java Type: `" + JNIEnv.GetClassNameFromInstance(handle) + "`; " +
                                           "MCW type: `" + instance.GetType().FullName + "`\n");
            }
        }
예제 #2
0
 public GremlinScript(IJavaObject javaObject)
 {
     _sb.Append(javaObject.ToString());
 }
예제 #3
0
 public JavaObject(IJavaObject javaObject)
 {
     _sb.Append(javaObject.ToString());
 }
예제 #4
0
 public JavaString(IJavaObject javaObject)
 {
     _sb.Append(javaObject.ToString());
 }
예제 #5
0
 public GremlinScript(IJavaObject javaObject)
 {
     _sb.Append(javaObject.ToString());
 }