/* Various JNI helper functions */
-/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
jclass jxbt_get_class(JNIEnv * env, const char *name)
{
jclass cls = env->FindClass(name);
-
if (not cls) {
jxbt_throw_jni(env, std::string("Class ") + name + " not found");
return nullptr;
jmethodID jxbt_get_jmethod(JNIEnv * env, jclass cls, const char *name, const char *signature)
{
- jmethodID id;
-
if (not cls)
return nullptr;
- id = env->GetMethodID(cls, name, signature);
+ jmethodID id = env->GetMethodID(cls, name, signature);
if (not id) {
jmethodID tostr_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
- auto jclassname = (jstring)env->CallObjectMethod(cls, tostr_id, nullptr);
- const char* classname = env->GetStringUTFChars(jclassname, nullptr);
-
- env->ReleaseStringUTFChars(jclassname, classname);
+ auto jclassname = (jstring)env->CallObjectMethod(cls, tostr_id, nullptr);
+ jstring_wrapper classname(env, jclassname);
+ auto msg = std::string("Cannot find method") + name + "(" + signature + ") in " + classname.value;
- jxbt_throw_jni(env, std::string("Cannot find method") + name + "(" + signature + ") in " + classname);
+ jxbt_throw_jni(env, msg);
return nullptr;
}
jmethodID jxbt_get_static_jmethod(JNIEnv * env, jclass cls, const char *name, const char *signature)
{
- jmethodID id;
-
if (not cls)
return nullptr;
- id = env->GetStaticMethodID(cls, name, signature);
+ jmethodID id = env->GetStaticMethodID(cls, name, signature);
if (not id) {
jmethodID tostr_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
auto jclassname = (jstring)env->CallObjectMethod(cls, tostr_id, nullptr);
- const char* classname = env->GetStringUTFChars(jclassname, nullptr);
-
- env->ReleaseStringUTFChars(jclassname, classname);
+ jstring_wrapper classname(env, jclassname);
+ auto msg = std::string("Cannot find static method") + name + "(" + signature + ") in " + classname.value;
- jxbt_throw_jni(env, std::string("Cannot find static method") + name + "(" + signature + ") in " + classname);
+ jxbt_throw_jni(env, msg);
return nullptr;
}
jmethodID jxbt_get_static_smethod(JNIEnv * env, const char *classname, const char *name, const char *signature)
{
- jclass cls;
- jmethodID id;
- cls = jxbt_get_class(env, classname);
-
+ jclass cls = jxbt_get_class(env, classname);
if (not cls)
return nullptr;
- id = env->GetStaticMethodID(cls, name, signature);
-
+ jmethodID id = env->GetStaticMethodID(cls, name, signature);
if (not id) {
jxbt_throw_jni(env, std::string("Cannot find static method") + name + "(" + signature + ") in " + classname);
return nullptr;
jmethodID jxbt_get_smethod(JNIEnv * env, const char *classname, const char *name, const char *signature)
{
- jclass cls;
- jmethodID id;
- cls = jxbt_get_class(env, classname);
-
+ jclass cls = jxbt_get_class(env, classname);
if (not cls)
return nullptr;
- id = env->GetMethodID(cls, name, signature);
-
+ jmethodID id = env->GetMethodID(cls, name, signature);
if (not id) {
jxbt_throw_jni(env, std::string("Cannot find method") + name + "(" + signature + ") in " + classname);
return nullptr;
jfieldID jxbt_get_jfield(JNIEnv * env, jclass cls, const char *name, const char *signature)
{
- jfieldID id;
-
if (not cls)
return nullptr;
- id = env->GetFieldID(cls, name, signature);
-
+ jfieldID id = env->GetFieldID(cls, name, signature);
if (not id) {
jmethodID getname_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
auto jclassname = (jstring)env->CallObjectMethod(cls, getname_id, nullptr);
jfieldID jxbt_get_sfield(JNIEnv * env, const char *classname, const char *name, const char *signature)
{
jclass cls = jxbt_get_class(env, classname);
- jfieldID id;
-
if (not cls)
return nullptr;
- id = env->GetFieldID(cls, name, signature);
-
+ jfieldID id = env->GetFieldID(cls, name, signature);
if (not id) {
jxbt_throw_jni(env, std::string("Cannot find field") + signature + " " + name + " in " + classname);
return nullptr;
void jxbt_throw_host_failure(JNIEnv* env, const std::string& details)
{
- jxbt_throw_by_name(env, "org/simgrid/msg/HostFailureException", "Host Failure " + details);
+ jxbt_throw_by_name(env, "org/simgrid/msg/HostFailureException", "Host Failure" + details);
}
void jxbt_throw_time_out_failure(JNIEnv* env, const std::string& details)