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); }
public String 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; return Foundation.toString(id); }
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 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); }
@Override public Object readFrom(Memory buffer, Class<?> type) { ID id = ID.fromLong(buffer.getNativeLong(0).longValue()); if (id.isNull()) return null; return id; } @Override public Memory bufferForResult(Object methodCallResult) {
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; }
@Override public Object readFrom(Memory buffer, Class<?> type) { ID id = ID.fromLong(buffer.getNativeLong(0).longValue()); if (id.isNull()) return null; return Foundation.toString(id); } @Override public Memory bufferForResult(Object methodCallResult) {
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); } } }
@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) {
/** Get the value of a synthesizer property. * @param property the property whose value should be retrieved * @return the value asociated with the property * @throws IllegalArgumentException if an error occurs while reading the property */ public NSObject getProperty(SpeechProperty property) throws IllegalArgumentException { ObjCObjectByReference errorPtr = new ObjCObjectByReference(); NSObject result = objectForProperty_error(property.getNativeValue(), errorPtr); NSError error = errorPtr.getValueAs(NSError.class); //objectForProperty:error isn't well documented, so be very conservative if ( result != null && !result.id().isNull() && (error == null || error.id().isNull() || error.code().intValue() == 0) ) { return result; } else { throw new IllegalArgumentException("Could not get property: " + property + ", error: " + error.localizedDescription()); } }