#include "jvm.h" thread_local JNIEnv *env; namespace skyline { JvmManager::JvmManager(JNIEnv *environ, jobject instance) : instance(instance), instanceClass(reinterpret_cast(environ->NewGlobalRef(environ->GetObjectClass(instance)))) { env = environ; if(env->GetJavaVM(&vm) < 0) throw exception("Cannot get JavaVM from environment"); } void JvmManager::AttachThread() { if(!env) vm->AttachCurrentThread(&env, nullptr); } void JvmManager::DetachThread() { if(env) vm->DetachCurrentThread(); } JNIEnv* JvmManager::GetEnv() { return env; } jobject JvmManager::GetField(const char *key, const char *signature) { return env->GetObjectField(instance, env->GetFieldID(instanceClass, key, signature)); } bool JvmManager::CheckNull(const char *key, const char *signature) { return env->IsSameObject(env->GetObjectField(instance, env->GetFieldID(instanceClass, key, signature)), nullptr); } bool JvmManager::CheckNull(jobject& object) { return env->IsSameObject(object, nullptr); } }