Merge pull request 'master' (#8) from whereswaldon/jni:master into master
Reviewed-on: #8
This commit is contained in:
		
						commit
						34026c7e22
					
				
							
								
								
									
										1
									
								
								gojni.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								gojni.h
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -23,6 +23,7 @@ __attribute__ ((visibility ("hidden"))) void _jni_DeleteGlobalRef(JNIEnv *env, j
 | 
			
		|||
__attribute__ ((visibility ("hidden"))) jobject _jni_NewLocalRef(JNIEnv *env, jobject obj);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) void _jni_DeleteLocalRef(JNIEnv *env, jobject obj);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jint _jni_CallStaticIntMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jboolean _jni_CallStaticBooleanMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jobject _jni_CallStaticObjectMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) jobject _jni_NewObjectA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args);
 | 
			
		||||
__attribute__ ((visibility ("hidden"))) void _jni_CallStaticVoidMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								jni.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								jni.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -118,6 +118,10 @@ jint _jni_CallStaticIntMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue
 | 
			
		|||
	return (*env)->CallStaticIntMethodA(env, cls, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jboolean _jni_CallStaticBooleanMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallStaticBooleanMethodA(env, cls, method, args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jobject _jni_CallStaticObjectMethodA(JNIEnv *env, jclass cls, jmethodID method, jvalue *args) {
 | 
			
		||||
	return (*env)->CallStaticObjectMethodA(env, cls, method, args);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								jni.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								jni.go
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -104,6 +104,12 @@ func CallStaticIntMethod(e Env, cls Class, method MethodID, args ...Value) (int,
 | 
			
		|||
	return int(res), exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallStaticBooleanMethod calls a static method on a Java class, returning an int.
 | 
			
		||||
func CallStaticBooleanMethod(e Env, cls Class, method MethodID, args ...Value) (bool, error) {
 | 
			
		||||
	res := C._jni_CallStaticBooleanMethodA(e.env, C.jclass(cls), C.jmethodID(method), varArgs(args))
 | 
			
		||||
	return res == TRUE, exception(e)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindClass returns a reference to a Java class with a given name, using the
 | 
			
		||||
// JVM's default class loader. Any exceptions caused by the underlying JNI call
 | 
			
		||||
// (for example if the class is not found) will result in a panic.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										38
									
								
								jni_test.go
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								jni_test.go
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -198,6 +198,44 @@ func TestStaticObjectMethod(t *testing.T) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestStaticBooleanMethod(t *testing.T) {
 | 
			
		||||
	err := Do(vm, func(env Env) error {
 | 
			
		||||
		cls := FindClass(env, "test/AClass")
 | 
			
		||||
		mid := GetStaticMethodID(env, cls, "GetStaticBoolean", "()Z")
 | 
			
		||||
		if mid == nil {
 | 
			
		||||
			t.Errorf("MethodID is nil")
 | 
			
		||||
		}
 | 
			
		||||
		setterMid := GetStaticMethodID(env, cls, "SetStaticBoolean", "(Z)V")
 | 
			
		||||
		if setterMid == nil {
 | 
			
		||||
			t.Errorf("Setter MethodID is nil")
 | 
			
		||||
		}
 | 
			
		||||
		res, err := CallStaticBooleanMethod(env, cls, mid)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("Method invocation failed")
 | 
			
		||||
		}
 | 
			
		||||
		if !res {
 | 
			
		||||
			t.Errorf("Method returned %v, not expected value of %v.", res, true)
 | 
			
		||||
		}
 | 
			
		||||
		if err := CallStaticVoidMethod(env, cls, setterMid, FALSE); err != nil {
 | 
			
		||||
			t.Errorf("Setter invocation failed")
 | 
			
		||||
		}
 | 
			
		||||
		res, err = CallStaticBooleanMethod(env, cls, mid)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Errorf("Method invocation failed")
 | 
			
		||||
		}
 | 
			
		||||
		if res {
 | 
			
		||||
			t.Errorf("Method returned %v, not expected value of %v.", res, false)
 | 
			
		||||
		}
 | 
			
		||||
		if err := CallStaticVoidMethod(env, cls, setterMid, TRUE); err != nil {
 | 
			
		||||
			t.Errorf("Setter invocation failed")
 | 
			
		||||
		}
 | 
			
		||||
		return err
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("Error: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestMethod(t *testing.T) {
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if r := recover(); r == nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -47,7 +47,7 @@ public class AClass {
 | 
			
		|||
	private float pfl = (float)2.2;
 | 
			
		||||
	private double pdb = 1001.1001;
 | 
			
		||||
 | 
			
		||||
	public static Boolean GetStaticBoolean() {
 | 
			
		||||
	public static boolean GetStaticBoolean() {
 | 
			
		||||
		return staticbl;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -75,6 +75,10 @@ public class AClass {
 | 
			
		|||
		return staticobj;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void SetStaticBoolean(boolean val) {
 | 
			
		||||
		staticbl = val;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void IncInt() {
 | 
			
		||||
		in = in + 1;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user