/** * Create a Java NSObject wrapping an existing Objective-C instance, represented * by id. * * The NSObject is retained, and released when the object is GC'd. */ public static <T extends ObjCObject> T wrap(ID id, Class<T> javaClass) { return wrap(id, javaClass, true); }
public void callback(String selectorName, ID nsInvocation) { if (logging.isTraceEnabled()) { logging.trace("callback invoking {} on {}", selectorName, javaObject); } callMethod(javaObject, selectorName, Rococoa.wrap(nsInvocation, NSInvocation.class)); } };
/** * Create a Java NSObject down-casting an existing NSObject to a more derived * type. */ public static <T extends ObjCObject> T cast(ObjCObject object, Class<T> desiredType) { if (object == null) return null; return wrap(object.id(), desiredType, true); }
/** * Create a Java NSClass representing the Objective-C class with ocClassName */ public static <T extends ObjCClass> T createClass(String ocClassName, Class<T> type) { return wrap(Foundation.getClass(ocClassName), type, false); }
public static NSString getGlobalString(String libraryName, String globalVarName) { return Rococoa.wrap(ID.getGlobal(libraryName, globalVarName), NSString.class); }
public _Class call() throws Exception { return Rococoa.wrap(Foundation.getClass("QTMovie"), _Class.class); //$NON-NLS-1$ } });
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); }
/** * We need to make sure that we have filled in all NSObjectByReferences * so that they are retained. */ private void fillInReferences(Object[] args, Object[] marshalledArgs) { if (args == null) return; for (int i = 0; i < args.length; i++) { Object original = args[i]; Object marshalled = marshalledArgs[i]; if (marshalled instanceof IDByReference) { if (!(original instanceof ObjCObjectByReference)) { logging.error("Bad marshalling"); continue; } ((ObjCObjectByReference) original).setObject( Rococoa.wrap(((IDByReference) marshalled).getValue(), ObjCObject.class)); } } }
private static <T extends ObjCObject> T create(String ocClassName, Class<T> javaClass, String ocFactoryName, boolean retain, Object... args) { if (logging.isTraceEnabled()) { logging.trace("creating [{} ({})].{}({})", new Object[] {ocClassName, javaClass.getName(), ocFactoryName, new VarArgsUnpacker(args)}); } ID ocClass = Foundation.getClass(ocClassName); ID ocInstance = Foundation.send(ocClass, ocFactoryName, ID.class, args); int initialRetainCount = Foundation.cfGetRetainCount(ocInstance); T result = wrap(ocInstance, javaClass, retain); checkRetainCount(ocInstance, retain ? initialRetainCount + 1 : initialRetainCount); return result; }
@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) {