Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 34 additions & 10 deletions src/Mono.Android/Java.Lang/Throwable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ public partial class Throwable : global::System.Exception, IJavaObject, IDisposa
#endif // JAVA_INTEROP
{

static IntPtr java_lang_Object_toString;
protected bool is_generated;
IntPtr handle;

Expand Down Expand Up @@ -130,20 +129,45 @@ IntPtr IJavaObjectEx.ToLocalJniHandle ()

public override string StackTrace {
get {
if (string.IsNullOrEmpty (nativeStack) && handle != IntPtr.Zero) {
using (var nativeStackWriter = new Java.IO.StringWriter ())
using (var nativeStackPw = new Java.IO.PrintWriter (nativeStackWriter)) {
PrintStackTrace (nativeStackPw);
nativeStack = nativeStackWriter.ToString ();
}
nativeStack = base.StackTrace + Environment.NewLine +
" --- End of managed exception stack trace ---" + Environment.NewLine +
nativeStack;
return base.StackTrace + ManagedStackTraceAddendum;
}
}

string ManagedStackTraceAddendum {
get {
var javaStack = JavaStackTrace;
if (string.IsNullOrEmpty (javaStack))
return "";
return Environment.NewLine +
" --- End of managed " +
GetType ().FullName +
" stack trace ---" + Environment.NewLine +
javaStack;
}
}

string JavaStackTrace {
get {
if (!string.IsNullOrEmpty (nativeStack))
return nativeStack;

if (handle == IntPtr.Zero)
return null;

using (var nativeStackWriter = new Java.IO.StringWriter ())
using (var nativeStackPw = new Java.IO.PrintWriter (nativeStackWriter)) {
PrintStackTrace (nativeStackPw);
nativeStack = nativeStackWriter.ToString ();
}
return nativeStack;
}
}

public override string ToString ()
{
return base.ToString () + ManagedStackTraceAddendum;
}

#if JAVA_INTEROP
public int JniIdentityHashCode {
get {return (int) key_handle;}
Expand Down