#include #include #include #include "../src/mlp_priv.h" #include "mlp_java_priv.h" mlp_value *_mlp_java_convert_value(mlp_context *ctx, mlp_value *value, mlp_type type){ /* TODO */ return value ; } jobject mlp_java_make_Object(mlp_context *ctx, const mlp_value *value){ JavaVM *jvm = mlp_context_get_runtime(ctx)->runtime ; JNIEnv *env = mlp_java_get_env(jvm) ; if (value == NULL){ return NULL ; } mlp_type type = value->type ; switch (type){ case MLP_LONG: { jclass long_class = (*env)->FindClass(env, "java/lang/Long") ; if ((long_class == NULL)||(mlp_java_check_exception(env))){ (*env)->ExceptionDescribe(env) ; mlp_fatal("mlp_java: Can't find class 'java.lang.Long'") ; } jmethodID mid = (*env)->GetMethodID(env, long_class, "", "(J)V") ; if ((mid == NULL)||(mlp_java_check_exception(env))){ (*env)->ExceptionDescribe(env) ; mlp_fatal("mlp_java: Can't find constructor 'java.lang.Long(long)'") ; } jobject obj = (*env)->NewObject(env, long_class, mid, (jlong)value->value.l) ; if ((obj == NULL)||(mlp_java_check_exception(env))){ (*env)->ExceptionDescribe(env) ; mlp_fatal("mlp_java: Can't create object 'java.lang.Long(%ld)'", value->value.l) ; } return obj ; } case MLP_DOUBLE: { jclass dbl_class = (*env)->FindClass(env, "java/lang/Double") ; if ((dbl_class == NULL)||(mlp_java_check_exception(env))){ (*env)->ExceptionDescribe(env) ; mlp_fatal("mlp_java: Can't find class 'java.lang.Double'") ; } jmethodID mid = (*env)->GetMethodID(env, dbl_class, "", "(D)V") ; if ((mid == NULL)||(mlp_java_check_exception(env))){ (*env)->ExceptionDescribe(env) ; mlp_fatal("mlp_java: Can't find constructor 'java.lang.Double(double)'") ; } jobject obj = (*env)->NewObject(env, dbl_class, mid, (jdouble)value->value.d) ; if ((obj == NULL)||(mlp_java_check_exception(env))){ (*env)->ExceptionDescribe(env) ; mlp_fatal("mlp_java: Can't create object 'java.lang.Double(%lf)'", value->value.d) ; } return obj ; } case MLP_STRING: { return (*env)->NewStringUTF(env, value->value.s) ; } default: { mlp_context_set_error(ctx, MLP_NOT_IMPLEMENTED, "java_make_Object from %d", type) ; return NULL ; } } }