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)); }
public static object StrongJ2CpUntyped(IntPtr ptr) { JNIEnv env = JNIEnv.ThreadEnv; JniLocalHandle obj = ptr; if (JniHandle.IsNull(obj)) { return(null); } Class clazz = env.GetObjectClass(obj); RegistryRecord record = Registry.GetJVMRecord(clazz); return(record.CreateCLRProxyNoDelete(env, obj)); }
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)); }
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)); }