Bug 506090: log full stack traces via exception objects

Change-Id: I859b1adf22eb3a9c9a86a16cd6e22ef24b1b525e
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java
index 018c734..57d4223 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/UILockListener.java
@@ -201,8 +201,7 @@
 		String msg = "To avoid deadlock while executing Display.syncExec() with argument: " //$NON-NLS-1$
 				+ runnable + ", thread " + nonUiThread.getName() //$NON-NLS-1$
 				+ " will interrupt UI thread."; //$NON-NLS-1$
-		MultiStatus main = new MultiStatus(WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, msg,
-				new IllegalStateException());
+		MultiStatus main = new MultiStatus(WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, msg, null);
 
 		ThreadInfo[] threads = ManagementFactory.getThreadMXBean().getThreadInfo(new long[] { nonUiThread.getId(), display.getThread().getId() }, true, true);
 
@@ -214,8 +213,9 @@
 			} else {
 				childMsg = "UI thread waiting on a job or lock."; //$NON-NLS-1$
 			}
-			childMsg += " Stack: \n" + info.toString(); //$NON-NLS-1$
-			Status child = new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, childMsg, null);
+			Exception childEx = new IllegalStateException("Call stack for thread " + info.getThreadName()); //$NON-NLS-1$
+			childEx.setStackTrace(info.getStackTrace());
+			Status child = new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, childMsg, childEx);
 			main.add(child);
 		}