void init_vars(JNIEnv *env, const char *td_api_java_package) { BooleanClass = get_jclass(env, "java/lang/Boolean"); IntegerClass = get_jclass(env, "java/lang/Integer"); LongClass = get_jclass(env, "java/lang/Long"); DoubleClass = get_jclass(env, "java/lang/Double"); StringClass = get_jclass(env, "java/lang/String"); ObjectClass = get_jclass(env, (PSLICE() << td_api_java_package << "/TdApi$Object").c_str()); ArrayKeyboardButtonClass = get_jclass(env, (PSLICE() << "[L" << td_api_java_package << "/TdApi$KeyboardButton;").c_str()); ArrayInlineKeyboardButtonClass = get_jclass(env, (PSLICE() << "[L" << td_api_java_package << "/TdApi$InlineKeyboardButton;").c_str()); GetConstructorID = get_method_id(env, ObjectClass, "getConstructor", "()I"); BooleanGetValueMethodID = get_method_id(env, BooleanClass, "booleanValue", "()Z"); IntegerGetValueMethodID = get_method_id(env, IntegerClass, "intValue", "()I"); LongGetValueMethodID = get_method_id(env, LongClass, "longValue", "()J"); DoubleGetValueMethodID = get_method_id(env, DoubleClass, "doubleValue", "()D"); }
JNIEXPORT void JNICALL Java_gnu_java_nio_VMChannel_initIDs (JNIEnv *env, jclass clazz __attribute__ ((__unused__))) { jclass bufferClass = JCL_FindClass(env, "java/nio/Buffer"); jclass byteBufferClass = JCL_FindClass(env, "java/nio/ByteBuffer"); address_fid = (*env)->GetFieldID(env, bufferClass, "address", "Lgnu/classpath/Pointer;"); if (address_fid == NULL) { JCL_ThrowException(env, "java/lang/InternalError", "Unable to find internal field"); return; } get_position_mid = get_method_id(env, bufferClass, "position", "()I"); set_position_mid = get_method_id(env, bufferClass, "position", "(I)Ljava/nio/Buffer;"); get_limit_mid = get_method_id(env, bufferClass, "limit", "()I"); set_limit_mid = get_method_id(env, bufferClass, "limit", "(I)Ljava/nio/Buffer;"); has_array_mid = get_method_id(env, byteBufferClass, "hasArray", "()Z"); array_mid = get_method_id(env, byteBufferClass, "array", "()[B"); array_offset_mid = get_method_id(env, byteBufferClass, "arrayOffset", "()I"); }
bool jexcheck(JNIEnv *env) { jhthrowable jex(env->ExceptionOccurred()); if (!jex) return true; jmethodID mid = get_method_id(env, jex, "getMessage", "()Ljava/lang/String;"); scope_c_ptr_t<const char> s(jcast<const char *>((jstring)env->CallObjectMethod(jex.get(), mid))); ERR("java exception: %s", s.get()); env->ExceptionDescribe(); env->ExceptionClear(); errno = EFAULT; return false; }
jmethodID get_method_id(jholder<T> const &obj, const char *name, const char *signature) { return get_method_id(jnienv(), obj, name, signature); }
jmethodID get_method_id(JNIEnv *env, jholder<T> const &obj, const char *name, const char *signature) { return get_method_id(env, get_class(obj), name, signature); }
inline jmethodID get_method_id(jhclass const &cls, const char *name, const char *signature) { return get_method_id(jnienv(), cls, name, signature); }