001 package org.bridj.objc;
002
003 import org.bridj.NativeObject;
004 import org.bridj.Pointer;
005 import static org.bridj.Pointer.*;
006 import org.bridj.BridJ;
007
008 @org.bridj.ann.Runtime(ObjectiveCRuntime.class)
009 public class ObjCObject extends NativeObject {
010 static {
011 BridJ.register();
012 }
013
014 ObjCObject type;
015
016 //public native <T extends ObjCObject> Pointer<T> create();
017 public native <T extends ObjCObject> Pointer<T> init();
018 public native Pointer<NSString> stringValue();
019 public native Pointer<NSString> description();
020
021 public native int hash();
022 public native boolean isEqual(Pointer<? extends ObjCObject> anObject);
023
024 public native boolean isKindOf(Pointer<? extends ObjCObject> aClassObject);
025 public native boolean isMemberOf(Pointer<? extends ObjCObject> aClassObject);
026 public native boolean isKindOfClassNamed(Pointer<Byte> aClassName);
027 public native boolean isMemberOfClassNamed(Pointer<Byte> aClassName);
028
029 public native boolean respondsTo(SEL aSelector);
030 public native IMP methodFor(SEL aSelector);
031
032 public native Pointer<?> perform(SEL aSelector);
033 public native Pointer<?> perform$with(SEL aSelector, Pointer<?> anObject);
034 public native Pointer<?> perform$with$with(SEL aSelector, Pointer<?> object1, Pointer<?> object2);
035
036 public ObjCObject(Pointer<? extends NativeObject> peer) {
037 super(peer);
038 }
039
040 public ObjCObject() {
041 super();
042 }
043
044 public ObjCObject(int constructorId, Object... args) {
045 super(constructorId, args);
046 }
047
048 @Override
049 public String toString() {
050 Pointer<NSString> p = description();
051 if (p == null)
052 p = stringValue();
053
054 return p.get().toString();
055 }
056 @Override
057 public boolean equals(Object o) {
058 if (!(o instanceof ObjCObject))
059 return false;
060
061 Pointer<ObjCObject> p = pointerTo((ObjCObject)o);
062 return isEqual(p);
063 }
064 @Override
065 public int hashCode() {
066 return hash();
067 }
068 }