@@ -12,7 +12,8 @@ NanCallback* toNanCallback(v8::Handle<v8::Value>& callback) {
1212}
1313
1414MethodCallBaton::MethodCallBaton (Java* java, jobject method, jarray args, v8::Handle<v8::Value>& callback) :
15- NanAsyncWorker(toNanCallback(callback)) {
15+ NanAsyncWorker(toNanCallback(callback)),
16+ m_methodInvokeMethodId(0 ) {
1617 JNIEnv *env = java->getJavaEnv ();
1718 m_java = java;
1819 m_args = (jarray)env->NewGlobalRef (args);
@@ -34,6 +35,14 @@ MethodCallBaton::~MethodCallBaton() {
3435 env->DeleteGlobalRef (m_method);
3536}
3637
38+ jmethodID MethodCallBaton::getMethodInvokeMethodId () {
39+ if (m_methodInvokeMethodId == 0 ) {
40+ jclass methodClazz = m_env->FindClass (" java/lang/reflect/Method" );
41+ m_methodInvokeMethodId = m_env->GetMethodID (methodClazz, " invoke" , " (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" );
42+ }
43+ return m_methodInvokeMethodId;
44+ }
45+
3746void MethodCallBaton::run () {
3847 NanAsyncQueueWorker (this );
3948}
@@ -112,8 +121,7 @@ void NewInstanceBaton::ExecuteInternal() {
112121}
113122
114123void StaticMethodCallBaton::ExecuteInternal () {
115- jclass methodClazz = m_env->FindClass (" java/lang/reflect/Method" );
116- jmethodID method_invoke = m_env->GetMethodID (methodClazz, " invoke" , " (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" );
124+ jmethodID method_invoke = getMethodInvokeMethodId ();
117125
118126 /*
119127 printf("calling %s\n", javaObjectToString(m_env, m_method).c_str());
@@ -137,8 +145,7 @@ void StaticMethodCallBaton::ExecuteInternal() {
137145}
138146
139147void InstanceMethodCallBaton::ExecuteInternal () {
140- jclass methodClazz = m_env->FindClass (" java/lang/reflect/Method" );
141- jmethodID method_invoke = m_env->GetMethodID (methodClazz, " invoke" , " (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" );
148+ jmethodID method_invoke = getMethodInvokeMethodId ();
142149
143150 /*
144151 printf("calling %s\n", javaObjectToString(m_env, m_method).c_str());
0 commit comments