static NSObject toObject(Class<? extends NSObject> cls, long handle, long flags, boolean retain) { NSObject o = ObjCObject.toObjCObject(cls, handle, retain ? 0 : FLAG_NO_RETAIN); return o; } @MarshalsPointer
/** * Creates a new instance of the specified {@link ObjCClass}. If * {@code makePeer == true} this method MUST be called while the * {@link #objcBridgeLock} is held. */ @SuppressWarnings("unchecked") private static <T extends ObjCObject> T createInstance(ObjCClass objCClass, long handle, int afterMarshaledFlags, boolean makePeer) { Class<T> c = (Class<T>) objCClass.getType(); T o = VM.allocateObject(c); o.setHandle(handle); if (makePeer) { setPeerObject(handle, o); } if (objCClass.isCustom()) { VM.setBoolean(VM.getObjectAddress(o) + CUSTOM_CLASS_OFFSET, true); } o.afterMarshaled(afterMarshaledFlags); return o; }
protected void dispose(boolean finalizing) { long handle = getHandle(); if (handle != 0) { removePeerObject(this); doDispose(); setHandle(0); } if (finalizing) { try { super.finalize(); } catch (Throwable e) { throw new RuntimeException(e); } } }
protected void initObject(long handle) { if (handle == 0) { throw new RuntimeException("Objective-C initialization method returned nil"); } long oldHandle = getHandle(); if (handle != oldHandle) { if (oldHandle != 0) { removePeerObject(this); } setHandle(handle); setPeerObject(handle, this); } }
protected ObjCObject() { long handle = alloc(); setHandle(handle); if (handle != 0) { // Make sure the peer is set immediately even if a different handle // is set later with initObject(). setPeerObject(handle, this); } customClass = getObjCClass().isCustom(); }
public ObjCObjectRef(ObjCObject referent) { super(referent); handle = referent.getHandle(); } }
return createInstance(ObjCClass.getByType(cls), handle, afterMarshaledFlags, false); T o = getPeerObject(handle); if (o != null && o.getHandle() != 0) { if (!expectedType.isAssignableFrom(o.getClass())) { if (ObjCClass.isObjCProxy(o.getClass())) { removePeerObject(o); o = null; } else if (ObjCClass.isObjCProxy(cls)) { return createInstance(ObjCClass.getByType(cls), handle, afterMarshaledFlags, false); } else { return createInstance(objCClass, handle, afterMarshaledFlags, true);
public static ObjCClass getFromObject(ObjCObject id) { long handle = id.getHandle(); ObjCClass c = null; if (handle != 0L) { long classPtr = ObjCRuntime.object_getClass(handle); c = ObjCObject.getPeerObject(classPtr); } if (c != null) { return c; } return getByType(id.getClass()); }
@Override protected void doDispose() { super.doDispose(); // Only release once long handle = getHandle(); if (handle != 0) { release(handle); } }
@Override protected void afterMarshaled(int flags) { super.afterMarshaled(flags); if ((flags & FLAG_NO_RETAIN) == 0) { retain(getHandle()); } }
protected ObjCObject(long handle) { initObject(handle); customClass = getObjCClass().isCustom(); }
@Override protected final void finalize() throws Throwable { dispose(true); }
public static ObjCClass toObjCClass(final long handle) { long classPtr = handle; ObjCClass c = ObjCObject.getPeerObject(classPtr); if (c == null) { c = getByNameNotLoaded(VM.newStringUTF(ObjCRuntime.class_getName(classPtr))); c = ObjCObject.getPeerObject(classPtr); if (c == null) { c = getByNameNotLoaded(VM.newStringUTF(ObjCRuntime.class_getName(classPtr)));
@MarshalsPointer public static long protocolToNative(ObjCProtocol o, long flags) { if (o == null) { return 0L; } return ((ObjCObject) o).getHandle(); } }
protected void initObject(long handle) { if (handle == 0) { throw new RuntimeException("Objective-C initialization method returned nil"); } long oldHandle = getHandle(); if (handle != oldHandle) { if (oldHandle != 0) { removePeerObject(this); } setHandle(handle); setPeerObject(handle, this); } }
return createInstance(ObjCClass.getByType(cls), handle, afterMarshaledFlags, false); T o = getPeerObject(handle); if (o != null && o.getHandle() != 0) { if (!expectedType.isAssignableFrom(o.getClass())) { if (ObjCClass.isObjCProxy(o.getClass())) { removePeerObject(o); o = null; } else if (ObjCClass.isObjCProxy(cls)) { return createInstance(ObjCClass.getByType(cls), handle, afterMarshaledFlags, false); } else { return createInstance(objCClass, handle, afterMarshaledFlags, true);
protected ObjCObject() { long handle = alloc(); setHandle(handle); if (handle != 0) { // Make sure the peer is set immediately even if a different handle // is set later with initObject(). setPeerObject(handle, this); } customClass = getObjCClass().isCustom(); }
public static ObjCClass getFromObject(ObjCObject id) { long handle = id.getHandle(); ObjCClass c = null; if (handle != 0L) { long classPtr = ObjCRuntime.object_getClass(handle); c = ObjCObject.getPeerObject(classPtr); } if (c != null) { return c; } return getByType(id.getClass()); }
@Override protected void doDispose() { super.doDispose(); // Only release once long handle = getHandle(); if (handle != 0) { release(handle); } }
@Override protected void afterMarshaled(int flags) { super.afterMarshaled(flags); if ((flags & FLAG_NO_RETAIN) == 0) { retain(getHandle()); } }