@@ -194,37 +194,187 @@ void NativeScriptRuntime::CallJavaMethod(const Handle<Object>& caller, const str
194
194
jmethodID mid;
195
195
string sig;
196
196
197
- if ((entry != nullptr ) && entry->isResolved )
198
- {
199
- isStatic = entry->isStatic ;
200
- if (entry->memberId == nullptr )
197
+ // if ((entry != nullptr) && entry->isResolved)
198
+ // {
199
+ // isStatic = entry->isStatic;
200
+ //
201
+ // if (entry->memberId == nullptr)
202
+ // {
203
+ // entry->clazz = env.FindClass(className);
204
+ // if (entry->clazz == nullptr)
205
+ // {
206
+ // MetadataNode* callerNode = MetadataNode::GetNodeFromHandle(caller);
207
+ // const string callerClassName = callerNode->GetName();
208
+ //
209
+ // DEBUG_WRITE("Cannot resolve class: %s while calling method: %s callerClassName: %s", className.c_str(), methodName.c_str(), callerClassName.c_str());
210
+ // clazz = env.FindClass(callerClassName);
211
+ // if (clazz == nullptr)
212
+ // {
213
+ // DEBUG_WRITE("Cannot resolve caller's class name: %s", callerClassName.c_str());
214
+ // return;
215
+ // }
216
+ //
217
+ // mid = isStatic ?
218
+ // env.GetStaticMethodID(clazz, methodName, entry->sig) :
219
+ // env.GetMethodID(clazz, methodName, entry->sig);
220
+ //
221
+ // if (mid == nullptr)
222
+ // {
223
+ // DEBUG_WRITE("Cannot resolve a method %s on caller class: %s", methodName.c_str(), callerClassName.c_str());
224
+ // return;
225
+ // }
226
+ //
227
+ // }
228
+ // else
229
+ // {
230
+ // entry->memberId = isStatic ?
231
+ // env.GetStaticMethodID(entry->clazz, methodName, entry->sig) :
232
+ // env.GetMethodID(entry->clazz, methodName, entry->sig);
233
+ //
234
+ // if (entry->memberId == nullptr)
235
+ // {
236
+ // DEBUG_WRITE("Cannot resolve a method %s on class: %s", methodName.c_str(), className.c_str());
237
+ // return;
238
+ // }
239
+ // }
240
+ // }
241
+ //
242
+ // if (entry->clazz != nullptr)
243
+ // {
244
+ // clazz = entry->clazz;
245
+ // mid = reinterpret_cast<jmethodID>(entry->memberId);
246
+ // }
247
+ //
248
+ // sig = entry->sig;
249
+ // }
250
+ // else
251
+ // {
252
+ // DEBUG_WRITE("Resolving method: %s.%s on className %s", className.c_str(), methodName.c_str(), className.c_str());
253
+ // auto mi = MethodCache::ResolveMethodSignature(className, methodName, args, isStatic);
254
+ // if (mi.mid == nullptr)
255
+ // {
256
+ // MetadataNode* callerNode = MetadataNode::GetNodeFromHandle(caller);
257
+ // const string callerClassName = callerNode->GetName();
258
+ // DEBUG_WRITE("Resolving method on caller class: %s.%s on className %s", callerClassName.c_str(), methodName.c_str(), className.c_str());
259
+ // mi = MethodCache::ResolveMethodSignature(callerClassName, methodName, args, isStatic);
260
+ // if (mi.mid == nullptr)
261
+ // {
262
+ // DEBUG_WRITE("Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d, callerClass=%s", className.c_str(), methodName.c_str(), isStatic, isSuper, callerClassName.c_str());
263
+ // return;
264
+ // }
265
+ // }
266
+ //
267
+ // clazz = mi.clazz;
268
+ // mid = mi.mid;
269
+ // sig = mi.signature;
270
+ // }
271
+
272
+
273
+
274
+
275
+
276
+ if ((entry != nullptr ) && entry->isResolved )
201
277
{
202
- entry->clazz = env.FindClass (className);
203
- if (entry->clazz == nullptr )
278
+ isStatic = entry->isStatic ;
279
+
280
+ if (entry->memberId == nullptr )
281
+ {
282
+ entry->clazz = env.FindClass (className);
283
+ if (entry->clazz == nullptr )
284
+ {
285
+ MetadataNode* callerNode = MetadataNode::GetNodeFromHandle (caller);
286
+ const string callerClassName = callerNode->GetName ();
287
+
288
+ DEBUG_WRITE (" Cannot resolve class: %s while calling method: %s callerClassName: %s" , className.c_str (), methodName.c_str (), callerClassName.c_str ());
289
+ clazz = env.FindClass (callerClassName);
290
+ if (clazz == nullptr )
291
+ {
292
+ DEBUG_WRITE (" Cannot resolve caller's class name: %s" , callerClassName.c_str ());
293
+ return ;
294
+ }
295
+
296
+ mid = isStatic ?
297
+ env.GetStaticMethodID (clazz, methodName, entry->sig ) :
298
+ env.GetMethodID (clazz, methodName, entry->sig );
299
+
300
+ if (mid == nullptr )
301
+ {
302
+ DEBUG_WRITE (" Cannot resolve a method %s on caller class: %s" , methodName.c_str (), callerClassName.c_str ());
303
+ return ;
304
+ }
305
+
306
+ }
307
+ else
308
+ {
309
+ entry->memberId = isStatic ?
310
+ env.GetStaticMethodID (entry->clazz , methodName, entry->sig ) :
311
+ env.GetMethodID (entry->clazz , methodName, entry->sig );
312
+
313
+ if (entry->memberId == nullptr )
314
+ {
315
+ DEBUG_WRITE (" Cannot resolve a method %s on class: %s" , methodName.c_str (), className.c_str ());
316
+ return ;
317
+ }
318
+ }
319
+ }
320
+
321
+ if (entry->clazz != nullptr )
204
322
{
205
- DEBUG_WRITE (" Cannot resolve class=%s while calling method %s" , className.c_str (), methodName.c_str ());
323
+ clazz = entry->clazz ;
324
+ mid = reinterpret_cast <jmethodID>(entry->memberId );
206
325
}
207
326
208
- entry->memberId = isStatic
209
- ? env.GetStaticMethodID (entry->clazz , methodName, entry->sig )
210
- : env.GetMethodID (entry->clazz , methodName, entry->sig );
327
+ sig = entry->sig ;
211
328
}
212
- clazz = entry->clazz ;
213
- mid = reinterpret_cast <jmethodID>(entry->memberId );
214
- sig = entry->sig ;
215
- }
216
- else
217
- {
218
- auto mi = MethodCache::ResolveMethodSignature (className, methodName, args, isStatic);
219
- if (mi.mid == nullptr )
329
+ else
220
330
{
221
- DEBUG_WRITE (" Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d" , className.c_str (), methodName.c_str (), isStatic, isSuper);
222
- return ;
331
+ // auto mi = MethodCache::ResolveMethodSignature(className, methodName, args, isStatic);
332
+ // if (mi.mid == nullptr)
333
+ // {
334
+ // DEBUG_WRITE("Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d", className.c_str(), methodName.c_str(), isStatic, isSuper);
335
+ // return;
336
+ // }
337
+ // clazz = mi.clazz;
338
+ // mid = mi.mid;
339
+ // sig = mi.signature;
340
+
341
+
342
+ // DEBUG_WRITE("Resolving method: %s.%s on className %s", className.c_str(), methodName.c_str(), className.c_str());
343
+ MethodCache::CacheMethodInfo mi;
344
+
345
+ clazz = env.FindClass (className);
346
+ if (clazz != nullptr )
347
+ {
348
+ mi = MethodCache::ResolveMethodSignature (className, methodName, args, isStatic);
349
+ if (mi.mid == nullptr )
350
+ {
351
+ DEBUG_WRITE (" Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d" , className.c_str (), methodName.c_str (), isStatic, isSuper);
352
+ return ;
353
+ }
354
+ }
355
+ else
356
+ {
357
+ MetadataNode* callerNode = MetadataNode::GetNodeFromHandle (caller);
358
+ const string callerClassName = callerNode->GetName ();
359
+ DEBUG_WRITE (" Resolving method on caller class: %s.%s on className %s" , callerClassName.c_str (), methodName.c_str (), className.c_str ());
360
+ mi = MethodCache::ResolveMethodSignature (callerClassName, methodName, args, isStatic);
361
+ if (mi.mid == nullptr )
362
+ {
363
+ DEBUG_WRITE (" Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d, callerClass=%s" , className.c_str (), methodName.c_str (), isStatic, isSuper, callerClassName.c_str ());
364
+ return ;
365
+ }
366
+ }
367
+
368
+
369
+ clazz = mi.clazz ;
370
+ mid = mi.mid ;
371
+ sig = mi.signature ;
223
372
}
224
- clazz = mi.clazz ;
225
- mid = mi.mid ;
226
- sig = mi.signature ;
227
- }
373
+
374
+
375
+
376
+
377
+
228
378
229
379
if (!isStatic)
230
380
{
0 commit comments