@@ -198,6 +198,7 @@ void NativeScriptRuntime::CallJavaMethod(const Handle<Object>& caller, const str
198
198
if ((entry != nullptr ) && entry->isResolved )
199
199
{
200
200
isStatic = entry->isStatic ;
201
+
201
202
if (entry->memberId == nullptr )
202
203
{
203
204
entry->clazz = env.FindClass (className);
@@ -206,31 +207,97 @@ void NativeScriptRuntime::CallJavaMethod(const Handle<Object>& caller, const str
206
207
MetadataNode* callerNode = MetadataNode::GetNodeFromHandle (caller);
207
208
const string callerClassName = callerNode->GetName ();
208
209
209
- DEBUG_WRITE (" Cannot resolve class: %s while calling method: %s callerNode : %s" , className.c_str (), methodName.c_str (), callerNode-> GetName () .c_str ());
210
- entry-> clazz = env.FindClass (callerClassName);
211
- if (entry-> clazz == nullptr )
210
+ DEBUG_WRITE (" Cannot resolve class: %s while calling method: %s callerClassName : %s" , className.c_str (), methodName.c_str (), callerClassName .c_str ());
211
+ clazz = env.FindClass (callerClassName);
212
+ if (clazz == nullptr )
212
213
{
213
214
ASSERT_FAIL (" Cannot resolve caller's class name: %s" , callerClassName.c_str ());
214
215
APP_FAIL (" Cannot resolve caller's class name" );
216
+ return ;
215
217
}
218
+
219
+ mid = isStatic ?
220
+ env.GetStaticMethodID (clazz, methodName, entry->sig ) :
221
+ env.GetMethodID (clazz, methodName, entry->sig );
222
+ }
223
+ else
224
+ {
225
+ entry->memberId = isStatic ?
226
+ env.GetStaticMethodID (entry->clazz , methodName, entry->sig ) :
227
+ env.GetMethodID (entry->clazz , methodName, entry->sig );
216
228
}
217
229
218
- entry->memberId = isStatic
219
- ? env.GetStaticMethodID (entry->clazz , methodName, entry->sig )
220
- : env.GetMethodID (entry->clazz , methodName, entry->sig );
230
+
231
+ }
232
+
233
+ if (entry->clazz != nullptr )
234
+ {
235
+ clazz = entry->clazz ;
236
+ mid = reinterpret_cast <jmethodID>(entry->memberId );
221
237
}
222
- clazz = entry->clazz ;
223
- mid = reinterpret_cast <jmethodID>(entry->memberId );
238
+
224
239
sig = entry->sig ;
240
+
241
+
242
+ // if (entry->memberId == nullptr)
243
+ // {
244
+ // entry->clazz = env.FindClass(className);
245
+ // if (entry->clazz == nullptr)
246
+ // {
247
+ // MetadataNode* callerNode = MetadataNode::GetNodeFromHandle(caller);
248
+ // const string callerClassName = callerNode->GetName();
249
+ //
250
+ // DEBUG_WRITE("Cannot resolve class: %s while calling method: %s callerClassName: %s", className.c_str(), methodName.c_str(), callerClassName.c_str());
251
+ // clazz = env.FindClass(callerClassName);
252
+ // if (clazz == nullptr)
253
+ // {
254
+ // ASSERT_FAIL("Cannot resolve caller's class name: %s", callerClassName.c_str());
255
+ // APP_FAIL("Cannot resolve caller's class name");
256
+ // return;
257
+ // }
258
+ // }
259
+ // else
260
+ // {
261
+ // clazz = entry->clazz;
262
+ // }
263
+ //
264
+ // entry->memberId = isStatic ?
265
+ // env.GetStaticMethodID(clazz, methodName, entry->sig) :
266
+ // env.GetMethodID(clazz, methodName, entry->sig);
267
+ // }
268
+ //
269
+ // if (entry->clazz != nullptr)
270
+ // {
271
+ // clazz = entry->clazz;
272
+ // }
273
+ //
274
+ // mid = reinterpret_cast<jmethodID>(entry->memberId);
275
+ // sig = entry->sig;
225
276
}
226
277
else
227
278
{
279
+ // nameri pravilnia klass koito e definiral tova ime za tekustata platforma
280
+ // spesti resolvemethod call ako clasa s ime className go niama i tarsi napravo ot object na dolu koi e definiral tozi method i
281
+ // vikai resolve na nego
282
+ // sled tova zapazi v entrito na metoda koi e iskinskia className. to realno parametara classname idva nai veroiatno ot entrito
283
+ // prosto mu smeni imeto
284
+
285
+ DEBUG_WRITE (" Resolving method: %s.%s on className %s" , className.c_str (), methodName.c_str (), className.c_str ());
228
286
auto mi = MethodCache::ResolveMethodSignature (className, methodName, args, isStatic);
229
287
if (mi.mid == nullptr )
230
288
{
231
- DEBUG_WRITE (" Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d" , className.c_str (), methodName.c_str (), isStatic, isSuper);
232
- return ;
289
+ MetadataNode* callerNode = MetadataNode::GetNodeFromHandle (caller);
290
+ const string callerClassName = callerNode->GetName ();
291
+ DEBUG_WRITE (" Resolving method on callers class: %s.%s on className %s" , callerClassName.c_str (), methodName.c_str (), className.c_str ());
292
+ mi = MethodCache::ResolveMethodSignature (callerClassName, methodName, args, isStatic);
293
+ if (mi.mid == nullptr )
294
+ {
295
+ ASSERT_FAIL (" Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d, callerClass=%s" , className.c_str (), methodName.c_str (), isStatic, isSuper, callerClassName.c_str ());
296
+ APP_FAIL (" Cannot resolve class" );
297
+ return ;
298
+ }
233
299
}
300
+
234
301
clazz = mi.clazz ;
235
302
mid = mi.mid ;
236
303
sig = mi.signature ;
0 commit comments