CreateCLRProxy() private method

private CreateCLRProxy ( JNIEnv env, JniLocalHandle obj ) : IJvmProxy
env net.sf.jni4net.jni.JNIEnv
obj JniLocalHandle
return IJvmProxy
Ejemplo n.º 1
0
        public static TRes StrongJ2Cp <TRes>(JNIEnv env, JniLocalHandle obj)
            where TRes : IJvmProxy
        {
            if (JniHandle.IsNull(obj))
            {
                return(default(TRes));
            }
            Class          clazz  = env.GetObjectClass(obj);
            RegistryRecord record = Registry.GetJVMRecord(clazz);

            return((TRes)record.CreateCLRProxy(env, obj));
        }
Ejemplo n.º 2
0
        public static TRes FullJ2C <TRes>(JNIEnv env, JniLocalHandle obj)
        {
            if (JniLocalHandle.IsNull(obj))
            {
                return(default(TRes));
            }
            Type reqType = typeof(TRes);

            if (reqType.IsPrimitive)
            {
                return((TRes)PrimJ2C(obj, env, reqType));
            }
#if DEBUG
            if (reqType.IsArray)
            {
                throw new InvalidOperationException("Call ArrayFullJ2C<TRes, TElem> instead");
            }
#endif
            Class clazz = env.GetObjectClass(obj);
            if (reqType == typeof(string) && clazz == String._class)
            {
                return((TRes)(object)StrongJ2CString(env, obj));
            }

            //now we deal only with JVM instances
            RegistryRecord record = Registry.GetJVMRecord(clazz);
            if (reqType.IsAssignableFrom(record.CLRInterface))
            {
                return((TRes)record.CreateCLRProxy(env, obj));
            }
            record = Registry.GetCLRRecord(reqType);
            if (Bridge.Setup.Debug)
            {
                if (!record.JVMInterface.isAssignableFrom(clazz))
                {
                    throw new InvalidCastException("Can't cast JVM instance" + clazz + " to " + reqType);
                }
            }
            return((TRes)record.CreateCLRProxy(env, obj));
        }
Ejemplo n.º 3
0
        public static TRes StrongJ2CpDelegate <TRes>(JNIEnv env, JniLocalHandle obj)
            where TRes : class //Delegate
        {
#if DEBUG
            if (!typeof(Delegate).IsAssignableFrom(typeof(TRes)))
            {
                throw new ArgumentException("expected delegate");
            }
#endif
            if (JniHandle.IsNull(obj))
            {
                return(default(TRes));
            }
            object res = __IClrProxy.GetObject(env, obj);
            if (res == null)
            {
                //that's delegate implemented in Java
                RegistryRecord delRecord = Registry.GetCLRRecord(typeof(TRes));
                IJvmProxy      jvmProxy  = delRecord.CreateCLRProxy(env, obj);
                return((TRes)(object)Delegate.CreateDelegate(typeof(TRes), jvmProxy, delRecord.JVMDelegateInvoke));
            }
            return((TRes)res);
        }
Ejemplo n.º 4
0
        public static TRes FullJ2C <TRes>(JNIEnv env, JniLocalHandle obj)
        {
            if (JniLocalHandle.IsNull(obj))
            {
                return(default(TRes));
            }
            Type reqType = typeof(TRes);

            if (reqType.IsPrimitive)
            {
                return((TRes)PrimJ2C(obj, env, reqType));
            }
#if DEBUG
            if (reqType.IsArray)
            {
                throw new InvalidOperationException("Call ArrayFullJ2C<TRes, TElem> instead");
            }
#endif
            Class clazz = env.GetObjectClass(obj);
            if (reqType == typeof(string) && clazz == String._class)
            {
                return((TRes)(object)StrongJp2CString(env, obj));
            }

            if (IClrProxy_._class.isAssignableFrom(clazz))
            {
                if (!reqType.IsInterface && typeof(IJvmProxy).IsAssignableFrom(reqType))
                {
                    //now we double wrap
                    return((TRes)__IClrProxy.CreateProxy(env, obj));
                }
                object res = __IClrProxy.GetObject(env, obj);
                if (res == null && Delegate_._class.isAssignableFrom(clazz))
                {
                    //that's delegate implemented in Java
                    RegistryRecord delRecord = Registry.GetJVMRecord(clazz);
                    IJvmProxy      jvmProxy  = delRecord.CreateCLRProxy(env, obj);
                    Delegate       del       = Delegate.CreateDelegate(delRecord.CLRInterface, jvmProxy, delRecord.JVMDelegateInvoke);
                    return((TRes)(object)del);
                }
                if (Bridge.Setup.Debug)
                {
                    Type realType = res.GetType();
                    if (!reqType.IsAssignableFrom(realType))
                    {
                        throw new InvalidCastException("Can't cast CLR instance" + realType + " to " + reqType);
                    }
                }
                return((TRes)res);
            }

            //now we deal only with JVM instances
            RegistryRecord record = Registry.GetJVMRecord(clazz);
            if (reqType.IsAssignableFrom(record.CLRInterface))
            {
                return((TRes)record.CreateCLRProxy(env, obj));
            }
            record = Registry.GetCLRRecord(reqType);
            if (Bridge.Setup.Debug)
            {
                if (!record.JVMInterface.isAssignableFrom(clazz))
                {
                    throw new InvalidCastException("Can't cast JVM instance" + clazz + " to " + reqType);
                }
            }
            return((TRes)record.CreateCLRProxy(env, obj));
        }