@@ -135,21 +135,6 @@ void NativeScriptException::Init(ObjectManager *objectManager)
135135 THROWABLE_CLASS = env.FindClass (" java/lang/Throwable" );
136136 assert (THROWABLE_CLASS != nullptr );
137137
138- THROWABLE_GET_CAUSE_METHOD_ID = env.GetMethodID (THROWABLE_CLASS, " getCause" , " ()Ljava/lang/Throwable;" );
139- assert (THROWABLE_GET_CAUSE_METHOD_ID != nullptr );
140-
141- THROWABLE_GET_STACK_TRACE_METHOD_ID = env.GetMethodID (THROWABLE_CLASS, " getStackTrace" , " ()[Ljava/lang/StackTraceElement;" );
142- assert (THROWABLE_GET_STACK_TRACE_METHOD_ID != nullptr );
143-
144- THROWABLE_TO_STRING_METHOD_ID = env.GetMethodID (THROWABLE_CLASS, V8StringConstants::TO_STRING, " ()Ljava/lang/String;" );
145- assert (THROWABLE_TO_STRING_METHOD_ID != nullptr );
146-
147- STACK_TRACE_ELEMENT_CLASS = env.FindClass (" java/lang/StackTraceElement" );
148- assert (STACK_TRACE_ELEMENT_CLASS != nullptr );
149-
150- FRAME_TO_STRING_METHOD_ID = env.GetMethodID (STACK_TRACE_ELEMENT_CLASS, V8StringConstants::TO_STRING, " ()Ljava/lang/String;" );
151- assert (FRAME_TO_STRING_METHOD_ID != nullptr );
152-
153138 NATIVESCRIPTEXCEPTION_CLASS = env.FindClass (" com/tns/NativeScriptException" );
154139 assert (NATIVESCRIPTEXCEPTION_CLASS != nullptr );
155140
@@ -158,6 +143,9 @@ void NativeScriptException::Init(ObjectManager *objectManager)
158143
159144 NATIVESCRIPTEXCEPTION_THROWABLE_CTOR_ID = env.GetMethodID (NATIVESCRIPTEXCEPTION_CLASS, " <init>" , " (Ljava/lang/String;Ljava/lang/Throwable;)V" );
160145 assert (NATIVESCRIPTEXCEPTION_THROWABLE_CTOR_ID != nullptr );
146+
147+ NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID = env.GetStaticMethodID (NATIVESCRIPTEXCEPTION_CLASS, " getStackTraceAsString" , " (Ljava/lang/Throwable;)Ljava/lang/String;" );
148+ assert (NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID != nullptr );
161149}
162150
163151// ON V8 UNCAUGHT EXCEPTION
@@ -394,62 +382,21 @@ string NativeScriptException::GetErrorStackTrace(const Local<StackTrace>& stackT
394382string NativeScriptException::GetExceptionMessage (JEnv& env, jthrowable exception)
395383{
396384 string errMsg;
397- JniLocalRef frames (env.CallObjectMethod (exception, THROWABLE_GET_STACK_TRACE_METHOD_ID));
398-
399- jsize framesLength = env.GetArrayLength (frames);
400-
401- if (nullptr != (jobjectArray) frames)
402- {
403- JniLocalRef msg (env.CallObjectMethod (exception, THROWABLE_TO_STRING_METHOD_ID));
404-
405- const char * msgStr = env.GetStringUTFChars (msg, nullptr );
406-
407- if (!errMsg.empty ())
408- {
409- errMsg.append (" \n Caused by: " );
410- errMsg.append (msgStr);
411- }
412- else
413- {
414- errMsg = msgStr;
415- }
385+ JniLocalRef msg (env.CallStaticObjectMethod (NATIVESCRIPTEXCEPTION_CLASS, NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID, exception));
416386
417- env.ReleaseStringUTFChars (msg, msgStr);
418- }
387+ const char * msgStr = env.GetStringUTFChars (msg, nullptr );
419388
420- for (jsize i = 0 ; i < framesLength; i++)
421- {
422- JniLocalRef frame (env.GetObjectArrayElement (frames, i));
423- JniLocalRef msg (env.CallObjectMethod (frame, FRAME_TO_STRING_METHOD_ID));
424-
425- const char * msgStr = env.GetStringUTFChars (msg, nullptr );
389+ errMsg.append (msgStr);
426390
427- errMsg.append (" \n " );
428- errMsg.append (msgStr);
391+ env.ReleaseStringUTFChars (msg, msgStr);
429392
430- env.ReleaseStringUTFChars (msg, msgStr);
431- }
432-
433- if (nullptr != (jobjectArray) frames)
434- {
435- JniLocalRef cause (env.CallObjectMethod (exception, THROWABLE_GET_CAUSE_METHOD_ID));
436-
437- if (nullptr != (jthrowable) cause)
438- {
439- errMsg = GetExceptionMessage (env, cause);
440- }
441- }
442393 return errMsg;
443394}
444395
445396ObjectManager* NativeScriptException::objectManager = nullptr ;
446397jclass NativeScriptException::RUNTIME_CLASS = nullptr ;
447398jclass NativeScriptException::THROWABLE_CLASS = nullptr ;
448- jmethodID NativeScriptException::THROWABLE_GET_CAUSE_METHOD_ID = nullptr ;
449- jmethodID NativeScriptException::THROWABLE_GET_STACK_TRACE_METHOD_ID = nullptr ;
450- jmethodID NativeScriptException::THROWABLE_TO_STRING_METHOD_ID = nullptr ;
451- jclass NativeScriptException::STACK_TRACE_ELEMENT_CLASS = nullptr ;
452- jmethodID NativeScriptException::FRAME_TO_STRING_METHOD_ID = nullptr ;
453399jclass NativeScriptException::NATIVESCRIPTEXCEPTION_CLASS = nullptr ;
454400jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_JSVALUE_CTOR_ID = nullptr ;
455401jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_THROWABLE_CTOR_ID = nullptr ;
402+ jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID = nullptr ;
0 commit comments