public boolean isNull() { return longValue() == 0; }
public static ID fromLong(long value) { return new ID(value); }
private void release() { if (ocInstance.isNull()) return; if (logging.isTraceEnabled()) { int retainCount = Foundation.cfGetRetainCount(ocInstance); logging.trace("finalizing [{} {}], releasing with retain count = {}", new Object[] {javaClassName, ocInstance, retainCount}); } Foundation.cfRelease(ocInstance); }
private void handleInitMethod(Object result) { // Normally init methods return self, but on error they may return nil. // In this case the ObjC object for which this is the handler is considered // freed and should not be released when we are finalized. if (result != null) return; ocInstance = ID.fromLong(0); }
public Object toNative(Object value, ToNativeContext context) { if (value == null) return null; ObjCObject valueAsNSObject = (ObjCObject) value; ID idToReturn = valueAsNSObject.id(); return idToReturn.toNative(); }
@Override public int createNSView() { return movieView.id().intValue(); }
public static NSString getGlobalString(String libraryName, String globalVarName) { return Rococoa.wrap(ID.getGlobal(libraryName, globalVarName), NSString.class); }
public static <T extends ObjCObject> T wrap(ID id, Class<T> javaClass, boolean retain) { if (id == null || id.isNull()) return null; // Why would we not want to retain? Well if we are wrapping a Core Foundation // created object, or one created with new (alloc init), it will not // have been autorelease'd. ObjCObjectInvocationHandler invocationHandler = new ObjCObjectInvocationHandler(id, javaClass, retain); return createProxy(javaClass, invocationHandler); }
public IDByReference() { this(ID.fromLong(0)); }
public Object toNative(Object value, ToNativeContext context) { if (value == null) return null; String valueAsString = (String) value; ID valueAsID = Foundation.cfString(valueAsString); Foundation.sendReturnsID(valueAsID, "autorelease"); return valueAsID.toNative(); } }
private Object invokeCocoa(final Method method, Object[] args) { String selectorName = selectorNameFor(method); Class<?> returnType = returnTypeFor(method); Object[] marshalledArgs = marshallArgsFor(method, args); Object result = sendOnThisOrMainThread(method, ocInstance, selectorName, returnType, marshalledArgs); if (method.getName().startsWith("init")) { handleInitMethod(result); } fillInReferences(args, marshalledArgs); if (result instanceof Pointer && method.getReturnType().equals(String.class)) // special case for return char* return ((Pointer) result).getString(0); if (result instanceof ID) if (((ID) result).isNull()) return null; return result; }
protected ID(ID anotherID) { this(anotherID.longValue()); }
public ID getValue() { return ID.fromLong(getPointer().getNativeLong(0).longValue()); }
public static ID getGlobal(String libraryName, String globalVarName) { return new ID(NativeLibrary.getInstance(libraryName).getGlobalVariableAddress(globalVarName).getNativeLong(0).longValue()); } }
public T fromNative(Object nativeValue, FromNativeContext context) { Number nativeValueAsNumber = (Number) nativeValue; if (nativeValueAsNumber == null) return null; ID id = ID.fromLong(nativeValueAsNumber.longValue()); if (id.isNull()) return null; boolean shouldRetain = shouldRetainFor(context); return Rococoa.wrap(id, javaType, shouldRetain); }
public ObjCObjectInvocationHandler(final ID ocInstance, Class<? extends ObjCObject> javaClass, boolean retain) { this.ocInstance = ocInstance; javaClassName = javaClass.getSimpleName(); invokeAllMethodsOnMainThread = shouldInvokeMethodsOnMainThread(javaClass); releaseOnFinalize = shouldReleaseInFinalize(javaClass); if (logging.isTraceEnabled()) { int retainCount = Foundation.cfGetRetainCount(ocInstance); logging.trace("Creating NSObjectInvocationHandler for id {}, javaclass {}. retain = {}, retainCount = {}", new Object[] {ocInstance, javaClass, retain, retainCount}); } if (ocInstance.isNull()) { throw new NullPointerException(); } if (retain) { if (callAcrossToMainThread()) { Foundation.runOnMainThread(new Runnable() { public void run() { Foundation.cfRetain(ocInstance); }}); } else { Foundation.cfRetain(ocInstance); } } }
@Override public String toString() { return String.format("[ID 0x%x]", longValue()); //$NON-NLS-1$ }
@SuppressWarnings("unchecked") @Override public Object readFrom(Memory buffer, Class<?> type) { ID id = ID.fromLong(buffer.getNativeLong(0).longValue()); if (id.isNull()) return null; return Rococoa.wrap(id, (Class<? extends ObjCObject>) type); } @Override public Memory bufferForResult(Object methodCallResult) {