@@ -155,17 +155,7 @@ void NativeScriptException::Init(ObjectManager *objectManager)
155155// ON V8 UNCAUGHT EXCEPTION
156156void NativeScriptException::OnUncaughtError (Local<Message> message, Local<Value> error)
157157{
158- auto isolate = Isolate::GetCurrent ();
159- string errorMessage;
160- auto v8FullMessage = ArgConverter::ConvertToV8String (isolate, " fullMessage" );
161-
162- if (error->IsObject () && error.As <Object>()->Has (v8FullMessage)) {
163- errorMessage = ArgConverter::ConvertToString (error.As <Object>()->Get (v8FullMessage).As <String>());
164- }
165-
166- if (errorMessage.size () == 0 ) {
167- errorMessage = GetErrorMessage (message, error);
168- }
158+ string errorMessage = GetErrorMessage (message, error);
169159
170160 NativeScriptException e (errorMessage);
171161 e.ReThrowToJava ();
@@ -252,17 +242,18 @@ string NativeScriptException::GetFullMessage(const TryCatch& tc, bool isExceptio
252242{
253243 auto ex = tc.Exception ();
254244
255- string message;
245+ string jsExeptionMessage;
246+
256247 if (!isExceptionEmpty && !isMessageEmpty)
257248 {
258- message = PrintErrorMessage (tc.Message (), ex);
249+ jsExeptionMessage = GetErrorMessage (tc.Message (), ex);
259250 }
260251
261252 stringstream ss;
262- ss << endl << prependMessage << message ;
253+ ss << endl << prependMessage << jsExeptionMessage ;
263254 string loggedMessage = ss.str ();
264255
265- DEBUG_WRITE ( " Error: %s " , loggedMessage. c_str () );
256+ PrintErrorMessage ( loggedMessage);
266257
267258 if (!tc.CanContinue ())
268259 {
@@ -306,10 +297,7 @@ JniLocalRef NativeScriptException::TryGetJavaThrowableObject(JEnv& env, const Lo
306297 return javaThrowableObject;
307298}
308299
309- string NativeScriptException::PrintErrorMessage (const Local<Message>& message, const Local<Value>& error)
310- {
311- string errorMessage = GetErrorMessage (message, error);
312-
300+ void NativeScriptException::PrintErrorMessage (const string &errorMessage) {
313301 // split the message by new lines to workaround the LogCat's maximum characters in a single message
314302 stringstream ss (errorMessage);
315303 string line;
@@ -318,22 +306,34 @@ string NativeScriptException::PrintErrorMessage(const Local<Message>& message, c
318306 // TODO: Log in the V8's Console as well?
319307 DEBUG_WRITE (" %s" , line.c_str ());
320308 }
321-
322- return errorMessage;
323309}
324310
325- string NativeScriptException::GetErrorMessage (const Local<Message>& message, const Local<Value>& error)
311+ string NativeScriptException::GetErrorMessage (const Local<Message>& message, Local<Value>& error)
326312{
327- stringstream ss;
313+ // get whole error message from previous stack
314+ string errMessage;
315+ auto v8FullMessage = ArgConverter::ConvertToV8String (Isolate::GetCurrent (), " fullMessage" );
316+ if (error->IsObject () && error.As <Object>()->Has (v8FullMessage)) {
317+ errMessage = ArgConverter::ConvertToString (error.As <Object>()->Get (v8FullMessage).As <String>());
318+ }
328319
320+ // get current message
329321 auto str = error->ToDetailString ();
330322 if (str.IsEmpty ())
331323 {
332324 str = String::NewFromUtf8 (Isolate::GetCurrent (), " " );
333325 }
334326 String::Utf8Value utfError (str);
335- ss << endl << endl << *utfError << endl;
327+
328+ // get script name
336329 auto scriptResName = message->GetScriptResourceName ();
330+
331+ // get stack trace
332+ string stackTraceMessage = GetErrorStackTrace (message->GetStackTrace ());
333+
334+ stringstream ss;
335+ ss << endl << errMessage;
336+ ss << endl << *utfError << endl;
337337 if (!scriptResName.IsEmpty () && scriptResName->IsString ())
338338 {
339339 ss << " File: \" " << ArgConverter::ConvertToString (scriptResName.As <String>());
@@ -342,10 +342,7 @@ string NativeScriptException::GetErrorMessage(const Local<Message>& message, con
342342 {
343343 ss << " File: \" <unknown>" ;
344344 }
345-
346345 ss << " , line: " << message->GetLineNumber () << " , column: " << message->GetStartColumn () << endl << endl;
347-
348- string stackTraceMessage = GetErrorStackTrace (message->GetStackTrace ());
349346 ss << " StackTrace: " << endl << stackTraceMessage << endl;
350347
351348 return ss.str ();
0 commit comments