001 /******************************************************************************* 002 * Copyright (c) 2009 Progress Software, Inc. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 *******************************************************************************/ 009 package test; 010 011 import org.fusesource.hawtjni.runtime.JniArg; 012 import org.fusesource.hawtjni.runtime.JniClass; 013 import org.fusesource.hawtjni.runtime.JniMethod; 014 import org.fusesource.hawtjni.runtime.Library; 015 016 import static org.fusesource.hawtjni.runtime.ArgFlag.*; 017 import static org.fusesource.hawtjni.runtime.MethodFlag.*; 018 019 /** 020 * 021 * @author <a href="http://hiramchirino.com">Hiram Chirino</a> 022 */ 023 @JniClass(conditional="defined(__APPLE__)") 024 public class ObjectiveCExample { 025 026 private static final Library LIBRARY = new Library("hawtjni-example", Example.class); 027 static { 028 LIBRARY.load(); 029 } 030 031 public static final void main(String args[]) { 032 033 // Memory pool... 034 long NSAutoreleasePool = objc_getClass("NSAutoreleasePool"); 035 long pool = $($(NSAutoreleasePool, alloc), init); 036 037 // Allocate and use a simple Objective C object 038 long NSString = objc_getClass("NSString"); 039 long id = $(NSString, stringWithUTF8String, "Hello"); 040 long value = $(id, length); 041 System.out.println("The length was: "+value); 042 043 // Release the pool to release the allocations.. 044 $(pool, release); 045 } 046 047 048 049 public static final long stringWithUTF8String = sel_registerName("stringWithUTF8String:"); 050 public static final long release = sel_registerName("release"); 051 public static final long alloc = sel_registerName("alloc"); 052 public static final long init = sel_registerName("init"); 053 public static final long length = sel_registerName("length"); 054 055 @JniMethod(cast="SEL", flags={POINTER_RETURN}) 056 public static final native long sel_registerName(String selectorName); 057 058 @JniMethod(cast="id", flags={POINTER_RETURN}) 059 public static final native long objc_getClass(String className); 060 061 @JniMethod(cast="id", flags={POINTER_RETURN}, accessor="objc_msgSend") 062 public static final native long $( 063 @JniArg(cast="id", flags={POINTER_ARG})long id, 064 @JniArg(cast="SEL", flags={POINTER_ARG})long sel 065 ); 066 067 @JniMethod(cast="id", flags={POINTER_RETURN}, accessor="objc_msgSend") 068 public static final native long $( 069 @JniArg(cast="id", flags={POINTER_ARG})long id, 070 @JniArg(cast="SEL", flags={POINTER_ARG})long sel, 071 String arg0); 072 073 }