static bool set_capabilities(JNIEnv *env) { RAWTRACE("Capabilities setup"); char const *caps[] = { #define RHO_DEFINE_CAP(x) #x, #include "rhocaps.inc" #undef RHO_DEFINE_CAP }; std::map<std::string, bool> actual_caps; #define RHO_DEFINE_CAP(x) actual_caps[#x] = RHO_CAP_ ## x ## _ENABLED; #include "rhocaps.inc" #undef RHO_DEFINE_CAP jclass cls = getJNIClass(RHODES_JAVA_CLASS_CAPABILITIES); if (!cls) return false; for (size_t i = 0, lim = sizeof(caps)/sizeof(caps[0]); i < lim; ++i) { std::string field_name = std::string(caps[i]) + "_ENABLED"; RAWTRACE2("%s->%d", field_name.c_str(), static_cast<int>(actual_caps[caps[i]])); jfieldID fid = getJNIClassStaticField(env, cls, field_name.c_str(), "Z"); if (!fid) return false; env->SetStaticBooleanField(cls, fid, actual_caps[caps[i]]); } return true; }
//---------------------------------------------------------------------------------------------------------------------- jobject RhoJniConvertor::getBooleanObject(bool val) { static jfieldID fidTRUE = getJNIClassStaticField(m_env, clsBoolean, "TRUE", "Ljava/lang/Boolean;"); static jfieldID fidFALSE = getJNIClassStaticField(m_env, clsBoolean, "FALSE", "Ljava/lang/Boolean;"); return m_env->GetStaticObjectField(clsBoolean, val ? fidTRUE : fidFALSE); }