//------------------------------------------------------------------------------ //------------------------------------------------------------------------------ JavaStaticClass::JavaStaticClass(const JavaStaticClassDef& in_javaStaticClassDef) { auto environment = JavaVirtualMachine::Get()->GetJNIEnvironment(); //Get the class m_className = in_javaStaticClassDef.GetClassName(); jclass jClass = environment->FindClass(m_className.c_str()); CS_ASSERT(jClass != nullptr, "Could not find Java class: '" + m_className + "'"); m_javaClass = static_cast<jclass>(environment->NewGlobalRef(jClass)); environment->DeleteLocalRef(jClass); //setup the method references for (const auto& method : in_javaStaticClassDef.GetMethods()) { CS_ASSERT(m_methods.find(method.first) == m_methods.end(), "Method '" + method.first + "' has already been added to Java static class '" + m_className + "'"); MethodInfo info; info.m_returnType = JavaMethodSignature::CalcReturnType(method.second); info.m_numArguments = JavaMethodSignature::CalcNumArguments(method.second); info.m_methodId = environment->GetStaticMethodID(m_javaClass, method.first.c_str(), method.second.c_str()); CS_ASSERT(info.m_methodId != nullptr, "Could not find method '" + method.first + "' in Java static class '" + m_className + "'"); m_methods.emplace(method.first, info); } }
char * initReflectanceMethods(JNIEnv *env) { jclass MethodClass; MethodClass = VMENV FindClass(env, "java/lang/reflect/Method"); MUST_GET_METHOD_ID(MethodIDs.getModifiers, MethodClass, NULL, "getModifiers","()I", env); MUST_GET_METHOD_ID(MethodIDs.getReturnType, MethodClass, NULL, "getReturnType","()Ljava/lang/Class;", env); MUST_GET_METHOD_ID(MethodIDs.getParameters, MethodClass, NULL, "getParameterTypes","()[Ljava/lang/Class;", env); MUST_GET_METHOD_ID(MethodIDs.getClass, MethodClass, NULL, "getDeclaringClass","()Ljava/lang/Class;", env); MUST_GET_METHOD_ID(MethodIDs.getName, MethodClass, NULL, "getName","()Ljava/lang/String;", env); MUST_GET_METHOD_ID(MethodIDs.getExceptions, MethodClass, NULL, "getExceptionTypes","()[Ljava/lang/Class;", env); MethodClass = VMENV FindClass(env, "java/lang/reflect/Constructor"); MUST_GET_METHOD_ID(ConstructorIDs.getModifiers, MethodClass, NULL, "getModifiers","()I", env); MUST_GET_METHOD_ID(ConstructorIDs.getParameters, MethodClass, NULL, "getParameterTypes","()[Ljava/lang/Class;", env); MUST_GET_METHOD_ID(ConstructorIDs.getClass, MethodClass, NULL, "getDeclaringClass","()Ljava/lang/Class;", env); MUST_GET_METHOD_ID(ConstructorIDs.getName, MethodClass, NULL, "getName","()Ljava/lang/String;", env); MUST_GET_METHOD_ID(ConstructorIDs.getExceptions, MethodClass, NULL, "getExceptionTypes","()[Ljava/lang/Class;", env); MethodClass = VMENV FindClass(env, "java/lang/reflect/Modifier"); ModifierStringID = VMENV GetStaticMethodID(env, MethodClass, "toString", "(I)Ljava/lang/String;"); if(ModifierStringID == NULL) fprintf(stderr, "Exception getting static method for Modifier - toString\n");fflush(stderr); return(NULL); }
void Application::quit() { auto env = df3d::AndroidServices::getEnv(); auto cls = env->FindClass("org/flaming0/df3d/Df3dAndroidServices"); auto methId = env->GetStaticMethodID(cls, "quitApp", "()V"); env->CallStaticVoidMethod(cls, methId); }