@@ -1134,29 +1134,56 @@ static bool InterfaceGenerateExports(InterfaceRef self, CoderRef p_coder)
11341134 CoderWriteLine (p_coder, " JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)" );
11351135 CoderWriteLine (p_coder, " {" );
11361136 CoderWriteLine (p_coder, " \t s_java_vm = vm;" );
1137- CoderWriteLine (p_coder, " \t JavaEnv *t_java_env; s_java_vm -> GetEnv((void **)&t_java_env, JNI_VERSION_1_2);" );
1138- CoderWriteLine (p_coder, " \t s_java_class = (jclass)t_java_env -> NewGlobalRef(t_java_env -> FindClass(\" %s\" ));" , t_java_class_name);
1137+ CoderWriteLine (p_coder, " \t JNIEnv *t_java_env; s_java_vm -> GetEnv((void **)&t_java_env, JNI_VERSION_1_2);" );
1138+ CoderWriteLine (p_coder, " \t s_java_class = (jclass)t_java_env -> NewGlobalRef(t_java_env -> FindClass(\" %s/%s \" ));" , t_java_class_name, NameGetCString (self -> name) );
11391139 CoderWriteLine (p_coder, " " );
11401140 CoderWriteLine (p_coder, " \t return JNI_VERSION_1_2;" );
11411141 CoderWriteLine (p_coder, " }" );
1142+ free (t_java_class_name);
11421143
1143- #ifdef NOT_USED
1144+ static struct { const char *name; const char *result; const char *signature; const char *args; } s_java_exports[] =
1145+ {
1146+ { " InterfaceQueryActivity" , " jobject" , nil, nil },
1147+ { " InterfaceQueryContainer" , " jobject" , nil, nil },
1148+ { " ObjectResolve" , " jlong" , " jobject chunk" , " chunk" },
1149+ { " ObjectRetain" , " void" , " jlong object" , " object" },
1150+ { " ObjectRelease" , " void" , " jlong object" , " object" },
1151+ { " ObjectExists" , " jboolean" , " jlong object" , " object" },
1152+ { " ObjectSend" , " void" , " jlong object, jobject message, jobject signature, jobject arguments" , " object, message, signature, arguments" },
1153+ { " ObjectPost" , " void" , " jlong object, jobject message, jobject signature, jobject arguments" , " object, message, signature, arguments" },
1154+ { " ContextMe" , " jlong" , nil, nil },
1155+ { " ContextTarget" , " jlong" , nil, nil },
1156+ };
1157+ t_java_class_name = strdup (NameGetCString (self -> qualified_name));
11441158 for (uint32_t i = 0 ; t_java_class_name[i] != ' \0 ' ; i++)
1145- if (t_java_class_name[i] == ' / ' )
1159+ if (t_java_class_name[i] == ' . ' )
11461160 t_java_class_name[i] = ' _' ;
1147- CoderWriteLine (p_coder, " extern \" C\" JNIEXPORT jobject JNICALL Java_%s_getActivity(JNIEnv *env, jobject obj) __attribute((visibility(\" default\" )));" , t_java_class_name);
1148- CoderWriteLine (p_coder, " JNIEXPORT jobject JNICALL Java_%s_getActivity(JNIEnv *env, jobject obj)" );
1149- CoderWriteLine (p_coder, " {" );
1150- CoderWriteLine (p_coder, " \t return java__get_activity();" );
1151- CoderWriteLine (p_coder, " }" );
1152- CoderWriteLine (p_coder, " extern \" C\" JNIEXPORT jobject JNICALL Java_%s_getContainer(JNIEnv *env, jobject obj) __attribute((visibility(\" default\" )));" , t_java_class_name);
1153- CoderWriteLine (p_coder, " JNIEXPORT jobject JNICALL Java_%s_getContainer(JNIEnv *env, jobject obj)" );
1154- CoderWriteLine (p_coder, " {" );
1155- CoderWriteLine (p_coder, " \t return java__get_container();" );
1156- CoderWriteLine (p_coder, " }" );
1161+ for (unsigned int i = 0 ; i < sizeof (s_java_exports) / sizeof (s_java_exports[0 ]); i++)
1162+ {
1163+ if (s_java_exports[i] . signature == nil)
1164+ {
1165+ CoderWriteLine (p_coder, " extern \" C\" JNIEXPORT %s JNICALL Java_%s_LC__1_1%s(JNIEnv *env, jobject obj) __attribute((visibility(\" default\" )));" , s_java_exports[i] . result, t_java_class_name, s_java_exports[i] . name);
1166+ CoderWriteLine (p_coder, " JNIEXPORT %s JNICALL Java_%s_LC__1_1%s(JNIEnv *env, jobject obj)" , s_java_exports[i] . result, t_java_class_name, s_java_exports[i] . name);
1167+ CoderWriteLine (p_coder, " {" );
1168+ if (strcmp (s_java_exports[i] . result, " void" ) == 0 )
1169+ CoderWriteLine (p_coder, " java_lcapi_%s(env);" , s_java_exports[i] . name);
1170+ else
1171+ CoderWriteLine (p_coder, " return java_lcapi_%s(env);" , s_java_exports[i] . name);
1172+ }
1173+ else
1174+ {
1175+ CoderWriteLine (p_coder, " extern \" C\" JNIEXPORT %s JNICALL Java_%s_LC__1_1%s(JNIEnv *env, jobject obj, %s) __attribute((visibility(\" default\" )));" , s_java_exports[i] . result, t_java_class_name, s_java_exports[i] . name, s_java_exports[i] . signature);
1176+ CoderWriteLine (p_coder, " JNIEXPORT %s JNICALL Java_%s_LC__1_1%s(JNIEnv *env, jobject obj, %s)" , s_java_exports[i] . result, t_java_class_name, s_java_exports[i] . name, s_java_exports[i] . signature);
1177+ CoderWriteLine (p_coder, " {" );
1178+ if (strcmp (s_java_exports[i] . result, " void" ) == 0 )
1179+ CoderWriteLine (p_coder, " java_lcapi_%s(env, %s);" , s_java_exports[i] . name, s_java_exports[i] . args);
1180+ else
1181+ CoderWriteLine (p_coder, " return java_lcapi_%s(env, %s);" , s_java_exports[i] . name, s_java_exports[i] . args);
1182+ }
1183+ CoderWriteLine (p_coder, " }" );
1184+ }
11571185 free (t_java_class_name);
1158- #endif
1159-
1186+
11601187 CoderWriteLine (p_coder, " #endif" );
11611188
11621189 return true ;
@@ -1175,7 +1202,8 @@ static bool InterfaceGenerateJava(InterfaceRef self, CoderRef p_coder)
11751202{
11761203 CoderWriteLine (p_coder, " package %s;" , NameGetCString (self -> qualified_name));
11771204
1178- // CoderWrite(p_coder, "%s", strchr(g_java_support_template, '\n') + 1);
1205+ for (unsigned int i = 1 ; g_java_support_template[i] != nil; i++)
1206+ CoderWrite (p_coder, " %s" , g_java_support_template[i]);
11791207
11801208 return true ;
11811209}
@@ -1193,7 +1221,7 @@ bool InterfaceGenerate(InterfaceRef self, const char *p_output)
11931221 char *t_native_output_filename, *t_java_output_filename;
11941222 if (MCCStringEndsWith (p_output, " /" ))
11951223 {
1196- MCCStringFormat (t_native_output_filename, " %s%s.lcidlc .cpp" , p_output, NameGetCString (self -> name));
1224+ MCCStringFormat (t_native_output_filename, " %s%s.lcidl .cpp" , p_output, NameGetCString (self -> name));
11971225 MCCStringFormat (t_java_output_filename, " %sLC.java" , p_output);
11981226 }
11991227 else
0 commit comments