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