1 #include <jni.h>
2 #include <stdlib.h>
3 #include "mixedjava.h"
4 
5 //
6 // Instance Method Calls
7 //
8 
9 /*
10  * Class:     MixedJava
11  * Method:    native_callback
12  * Signature: ()I
13  */
14 JNIEXPORT jint JNICALL
Java_MixedJava_native_1callback(JNIEnv * env,jobject obj)15 Java_MixedJava_native_1callback(JNIEnv *env, jobject obj){
16 	jclass obj_class = (*env)->GetObjectClass(env, obj);
17 	jmethodID mid = (*env)->GetMethodID(env, obj_class, "callback", "(I)I");
18 	jint val = (*env)->CallIntMethod(env, obj, mid, 7);
19 	return val;
20 }
21 
22 /*
23  * Class:     MixedJava
24  * Method:    native_callbackA
25  * Signature: ()V
26  */
27 JNIEXPORT void JNICALL
Java_MixedJava_native_1callbackA(JNIEnv * env,jobject obj)28 Java_MixedJava_native_1callbackA(JNIEnv *env, jobject obj){
29 	jclass obj_class = (*env)->GetObjectClass(env, obj);
30 	jmethodID mid = (*env)->GetMethodID(env, obj_class, "callbackA", "(ILMixedJava;)V");
31 	jvalue* args = (jvalue*) malloc(2 * sizeof(jvalue));
32 	args[0] = (jvalue) 1;
33 	args[1] = (jvalue) obj;
34 	(*env)->CallVoidMethodA(env, obj, mid, args);
35 }
36 
37 /*
38  * Class:     MixedJava
39  * Method:    native_callback_2
40  * Signature: (LMixedJava;LMixedJava;)V
41  */
42 JNIEXPORT void JNICALL
Java_MixedJava_native_1callback_12(JNIEnv * env,jclass cls,jobject obj1,jobject obj2)43 Java_MixedJava_native_1callback_12(JNIEnv *env, jclass cls, jobject obj1, jobject obj2){
44 	jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)I");
45 	(*env)->CallVoidMethod(env, obj1, mid, 8);
46 	(*env)->CallVoidMethod(env, obj2, mid, 9);
47 }
48 
49 //
50 // Non-Virtual Instance Method Calls
51 //
52 
53 /*
54  * Class:     MixedJava
55  * Method:    native_non_virtual_callback
56  * Signature: ()I
57  */
58 JNIEXPORT jint JNICALL
Java_MixedJava_native_1non_1virtual_1callback(JNIEnv * env,jobject obj)59 Java_MixedJava_native_1non_1virtual_1callback(JNIEnv *env, jobject obj){
60 	jclass obj_class = (*env)->GetObjectClass(env, obj);
61 	jclass super_cls = (*env)->GetSuperclass(env, obj_class);
62 	jmethodID mid;
63 	//mid = (*env)->GetMethodID(env, obj_class, "callback", "(I)I"); // result is 2
64 	mid = (*env)->GetMethodID(env, super_cls, "callback", "(I)I"); // result is 5
65 	jint val = (*env)->CallNonvirtualIntMethod(env, obj, super_cls, mid, 5);
66 	return val;
67 }
68 
69 //
70 // Static Method Calls
71 //
72 
73 /*
74  * Class:     MixedJava
75  * Method:    native_static_callback
76  * Signature: ()I
77  */
78 JNIEXPORT jint JNICALL
Java_MixedJava_native_1static_1callback(JNIEnv * env,jclass cls)79 Java_MixedJava_native_1static_1callback(JNIEnv *env, jclass cls){
80 	jmethodID mid = (*env) -> GetStaticMethodID(env, cls, "static_callback", "(I)I");
81 	jint val = (*env) -> CallStaticIntMethod(env, cls, mid, 5);
82 }
83 
84 /*
85  * Class:     MixedJava
86  * Method:    native_static_callback_2
87  * Signature: ()LMixedJava;
88  */
89 JNIEXPORT jobject JNICALL
Java_MixedJava_native_1static_1callback_12(JNIEnv * env,jclass cls)90 Java_MixedJava_native_1static_1callback_12(JNIEnv *env, jclass cls){
91 	jmethodID mid = (*env) -> GetStaticMethodID(env, cls, "static_callback2", "()LMixedJava;");
92 	jobject obj = (*env) -> CallStaticObjectMethod(env, cls, mid);
93 	return obj;
94 }
95 
96 
97