Bug 458214 - ConcurrentModificationException on SessionManager.getSession()
Summary: ConcurrentModificationException on SessionManager.getSession()
Status: NEW
Alias: None
Product: Sirius
Classification: Modeling
Component: Core (show other bugs)
Version: 2.0.0   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: triaged
Depends on:
Blocks:
 
Reported: 2015-01-23 03:38 EST by Esteban DUGUEPEROUX CLA
Modified: 2016-04-11 08:10 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Esteban DUGUEPEROUX CLA 2015-01-23 03:38:25 EST
Sometimes we get the following exception just after session closing because of the UI thread which call SessionManager.INSTANCE.getSession() :

java.util.ConcurrentModificationException
	at org.eclipse.emf.common.util.ArrayDelegatingEList$EIterator.checkModCount(ArrayDelegatingEList.java:879)
	at org.eclipse.emf.common.util.AbstractEList$EIterator.doNext(AbstractEList.java:704)
	at org.eclipse.emf.common.util.AbstractEList$EIterator.next(AbstractEList.java:690)
	at java.util.AbstractCollection.addAll(AbstractCollection.java:322)
	at java.util.LinkedHashSet.<init>(LinkedHashSet.java:169)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:325)
	at org.eclipse.sirius.business.internal.session.SessionTransientAttachment.getSessionTransientAttachement(SessionTransientAttachment.java:72)
	at org.eclipse.sirius.business.internal.session.SessionManagerImpl.getSession(SessionManagerImpl.java:213)
	at org.eclipse.sirius.ui.tools.internal.views.common.SessionWrapperContentProvider.getRepresentationsAssociatedToEObject(SessionWrapperContentProvider.java:195)
	at org.eclipse.sirius.ui.tools.internal.views.common.SessionWrapperContentProvider.doGetChildren(SessionWrapperContentProvider.java:140)
	at org.eclipse.sirius.ui.tools.internal.views.common.SessionWrapperContentProvider.getChildren(SessionWrapperContentProvider.java:88)
	at org.eclipse.sirius.common.ui.tools.api.navigator.GroupingContentProvider.getChildren(GroupingContentProvider.java:165)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider.getChildren(SiriusCommonContentProvider.java:175)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider.hasChildren(SiriusCommonContentProvider.java:401)
	at org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:110)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.callNormalHasChildren(NavigatorContentServiceContentProvider.java:430)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.access$4(NavigatorContentServiceContentProvider.java:425)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider$3.run(NavigatorContentServiceContentProvider.java:395)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:381)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:422)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2138)
	at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:588)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2176)
	at org.eclipse.jface.viewers.AbstractTreeViewer.optionallyPruneChildren(AbstractTreeViewer.java:2808)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2608)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1923)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1930)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1930)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1930)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1930)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1930)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:721)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1898)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1855)
	at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.java:561)
	at org.eclipse.jface.viewers.StructuredViewer$8.run(StructuredViewer.java:1535)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1443)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:403)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1404)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1533)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:548)
	at org.eclipse.ui.navigator.CommonViewer.refresh(CommonViewer.java:350)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.filter.FilteredCommonTree$NotifyingCommonViewer.refresh(FilteredCommonTree.java:1177)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider$3.run(SiriusCommonContentProvider.java:584)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider.runUpdates(SiriusCommonContentProvider.java:745)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider.runPendingUpdates(SiriusCommonContentProvider.java:737)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider.access$9(SiriusCommonContentProvider.java:728)
	at org.eclipse.sirius.ui.tools.internal.views.common.navigator.SiriusCommonContentProvider$4.runInUIThread(SiriusCommonContentProvider.java:714)
	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3537)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3189)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
	at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:622)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Comment 1 Laurent Redor CLA 2015-01-26 04:40:30 EST
Esteban, do you think that a simple copy of eObj.eAdapters(), before iterate on it, in SessionTransientAttachment.getSessionTransientAttachement(Notifier) could solve the problem?
Comment 2 Esteban DUGUEPEROUX CLA 2015-01-26 05:04:10 EST
No it will not be sufficient, the fix is have Session.Manager.getSession() thread safe. Perhaps a read-only transaction will solve this issue. I will try that.
Comment 3 Esteban DUGUEPEROUX CLA 2015-01-28 03:23:31 EST
https://git.eclipse.org/r/40522 has been created, the change consists of using a read transaction to access model but this can lead to deadlock for example on diagram creation because GMF view factories need UI resource in a non UI thread and UI thread need to access model through SessionManager.getSession() :

Thread creating the diagram :

Thread [ModalContext] (Suspended)	
	waiting for: Lock  (id=140)	
	Object.wait(long) line: not available [native method]	
	Lock(Object).wait() line: 502	
	Lock.lock() line: 34	
	OS.gdk_colormap_get_system() line: 3801	
	Color.init(int, int, int) line: 247	
	Color.<init>(Device, int, int, int) line: 79	
	FigureUtilities.<clinit>() line: 33	
	DNodeContainerViewFactory(AbstractViewFactory).initializeFromPreferences(View) line: 116	
	DNodeContainerViewFactory(AbstractShapeViewFactory).initializeFromPreferences(View) line: 50	
	DNodeContainerViewFactory(BasicNodeViewFactory).decorateView(View, View, IAdaptable, String, int, boolean) line: 211	
	DNodeContainerViewFactory(AbstractDesignerNodeFactory).decorateView(View, View, IAdaptable, String, int, boolean) line: 36	
	DNodeContainerViewFactory.decorateView(View, View, IAdaptable, String, int, boolean) line: 53	
	BasicNodeViewFactory$2.doExecute(IProgressMonitor, IAdaptable) line: 162	
	BasicNodeViewFactory$2(AbstractEMFOperation).execute(IProgressMonitor, IAdaptable) line: 150	
	DNodeContainerViewFactory(BasicNodeViewFactory).createView(IAdaptable, View, String, int, boolean, PreferencesHint) line: 170	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43	
	Method.invoke(Object, Object...) line: 622	
	SiriusViewProvider(AbstractViewProvider).createNewView(Class, Object[]) line: 249	
	SiriusViewProvider(AbstractViewProvider).createNode(IAdaptable, View, String, int, boolean, PreferencesHint) line: 119	
	DDiagramCanonicalSynchronizer(AbstractCanonicalSynchronizer).createViews(List<SiriusNodeDescriptor>, String, View) line: 294	
	DDiagramCanonicalSynchronizer(AbstractCanonicalSynchronizer).refreshSemanticChildren(View, EObject) line: 158	
	DDiagramCanonicalSynchronizer.refreshSemantic() line: 107	
	DDiagramCanonicalSynchronizer.synchronize() line: 101	
	DiagramDialectServices.createRepresentation(String, EObject, RepresentationDescription, Session, IProgressMonitor) line: 176	
	DialectManagerImpl.createRepresentation(String, EObject, RepresentationDescription, Session, IProgressMonitor) line: 151	
	CreateRepresentationCommand.doExecute() line: 115	
	CreateRepresentationCommand(RecordingCommand).execute() line: 135	
	EMFCommandOperation.doExecute(IProgressMonitor, IAdaptable) line: 119	
	EMFCommandOperation(AbstractEMFOperation).execute(IProgressMonitor, IAdaptable) line: 150	
	DefaultOperationHistory.execute(IUndoableOperation, IProgressMonitor, IAdaptable) line: 513	
	WorkspaceCommandStack(WorkspaceCommandStackImpl).doExecute(Command, Map<?,?>) line: 208	
	WorkspaceCommandStack.doExecute(Command, Map) line: 68	
	WorkspaceCommandStack(AbstractTransactionalCommandStack).execute(Command, Map<?,?>) line: 165	
	WorkspaceCommandStack(AbstractTransactionalCommandStack).execute(Command) line: 219	
	CreateRepresentationAction$1.run(IProgressMonitor) line: 127	
	ModalContext$ModalContextThread.run() line: 121	


UI thread calling SessionManager.getSession() :

Thread [main] (Suspended)	
	owns: TransactionImpl  (id=152)	
	owns: RunnableLock  (id=153)	
	owns: TransactionImpl  (id=154)	
	owns: RunnableLock  (id=155)	
	waiting for: Semaphore  (id=151)	
	Object.wait(long) line: not available [native method]	
	Semaphore.acquire(long) line: 39	
	OrderedLock.doAcquire(Semaphore, long) line: 176	
	OrderedLock.acquire(long) line: 110	
	OrderedLock.acquire() line: 84	
	Lock.uiSafeAcquire(boolean) line: 357	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).acquire(InternalTransaction) line: 580	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).activate(InternalTransaction) line: 508	
	TransactionImpl.start() line: 204	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).startTransaction(boolean, Map<?,?>) line: 424	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).runExclusive(Runnable) line: 321	
	SessionManagerImpl.getSession(Resource) line: 202	
	CommonItemSorter.category(Object) line: 75	
	CommonItemSorter(ViewerComparator).compare(Viewer, Object, Object) line: 121	
	CommonItemSorter.compare(Viewer, Object, Object) line: 94	
	CommonViewerSorter.compare(Viewer, TreePath, Object, Object) line: 140	
	TreePathViewerSorter$1.compare(Object, Object) line: 105	
	Arrays.mergeSort(Object[], Object[], int, int, int, Comparator) line: 1283	
	Arrays.sort(T[], Comparator<? super T>) line: 1223	
	CommonViewerSorter(TreePathViewerSorter).sort(Viewer, TreePath, Object[]) line: 103	
	FilteredCommonTree$NotifyingCommonViewer(AbstractTreeViewer).getSortedChildren(Object) line: 639	
	FilteredCommonTree$NotifyingCommonViewer(AbstractTreeViewer).updateChildren(Widget, Object, Object[], boolean) line: 2643	
	FilteredCommonTree$NotifyingCommonViewer(AbstractTreeViewer).internalRefreshStruct(Widget, Object, boolean) line: 1923	
	FilteredCommonTree$NotifyingCommonViewer(TreeViewer).internalRefreshStruct(Widget, Object, boolean) line: 721	
	FilteredCommonTree$NotifyingCommonViewer(AbstractTreeViewer).internalRefreshStruct(Widget, Object, boolean) line: 1930	
	FilteredCommonTree$NotifyingCommonViewer(TreeViewer).internalRefreshStruct(Widget, Object, boolean) line: 721	
	FilteredCommonTree$NotifyingCommonViewer(AbstractTreeViewer).internalRefresh(Widget, Object, boolean, boolean) line: 1898	
	FilteredCommonTree$NotifyingCommonViewer(AbstractTreeViewer).internalRefresh(Object, boolean) line: 1855	
	FilteredCommonTree$NotifyingCommonViewer(CommonViewer).internalRefresh(Object, boolean) line: 561	
	StructuredViewer$8.run() line: 1535	
	FilteredCommonTree$NotifyingCommonViewer(StructuredViewer).preservingSelection(Runnable, boolean) line: 1443	
	FilteredCommonTree$NotifyingCommonViewer(TreeViewer).preservingSelection(Runnable, boolean) line: 403	
	FilteredCommonTree$NotifyingCommonViewer(StructuredViewer).preservingSelection(Runnable) line: 1404	
	FilteredCommonTree$NotifyingCommonViewer(StructuredViewer).refresh(Object, boolean) line: 1533	
	FilteredCommonTree$NotifyingCommonViewer(ColumnViewer).refresh(Object, boolean) line: 548	
	FilteredCommonTree$NotifyingCommonViewer(CommonViewer).refresh(Object, boolean) line: 350	
	FilteredCommonTree$NotifyingCommonViewer.refresh(Object, boolean) line: 1177	
	SiriusCommonContentProvider$3.run() line: 584	
	SiriusCommonContentProvider.runUpdates(Collection<Runnable>) line: 745	
	SiriusCommonContentProvider.runPendingUpdates() line: 737	
	SiriusCommonContentProvider.access$9(SiriusCommonContentProvider) line: 728	
	SiriusCommonContentProvider$4.runInUIThread(IProgressMonitor) line: 714	
	UIJob$1.run() line: 95	
	RunnableLock.run() line: 35	
	UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 135	
	Display.runAsyncMessages(boolean) line: 3537	
	Display.readAndDispatch() line: 3189	
	EventLoopProgressMonitor.runEventLoop() line: 123	
	EventLoopProgressMonitor.isCanceled() line: 97	
	ThreadJob.isCanceled(IProgressMonitor) line: 144	
	ThreadJob.waitForRun(ThreadJob, IProgressMonitor, InternalJob, Thread) line: 233	
	ThreadJob.joinRun(ThreadJob, IProgressMonitor) line: 197	
	ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: 92	
	JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 286	
	Lock.uiSafeAcquire(boolean) line: 359	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).acquire(InternalTransaction) line: 580	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).activate(InternalTransaction) line: 508	
	TransactionImpl.start() line: 204	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).startTransaction(boolean, Map<?,?>) line: 424	
	TransactionalEditingDomainImpl(TransactionalEditingDomainImpl).runExclusive(Runnable) line: 321	
	SessionManagerImpl.getSession(EObject) line: 184	
	AbstractSaveRemoteChangesActionHandler.getCurrentSession(ISelection) line: 237	
	AbstractSaveRemoteChangesActionHandler.getCurrentRepositoryManagerIfAny(ISelection) line: 164	
	AbstractSaveRemoteChangesActionHandler.getOrCreateTransaction(ISelection) line: 285	
	DiscardChangesHandler(AbstractSaveRemoteChangesActionHandler).isEnabled() line: 103	
	HandlerProxy.isEnabled() line: 317	
	Command.isEnabled() line: 862	
	CommandContributionItem.isEnabled() line: 986	
	CommandContributionItem.updateToolItem() line: 670	
	CommandContributionItem.update(String) line: 582	
	CommandContributionItem.update() line: 569	
	CommandContributionItem$1.bindingManagerChanged(BindingManagerEvent) line: 1006	
	BindingManager.fireBindingManagerChanged(BindingManagerEvent) line: 900	
	BindingManager.setActiveBindings(Map, Map, Map, Map) line: 2176	
	BindingManager.recomputeBindings() line: 1742	
	BindingManager.contextManagerChanged(ContextManagerEvent) line: 689	
	ContextManager.fireContextManagerChanged(ContextManagerEvent) line: 165	
	ContextManager.setEventCaching(boolean) line: 324	
	ContextManager.deferUpdates(boolean) line: 83	
	ContextAuthority.sourceChanged(int) line: 673	
	ContextAuthority(ExpressionAuthority).sourceChanged(int, String[]) line: 310	
	ContextAuthority(ExpressionAuthority).sourceChanged(int, Map) line: 290	
	WorkbenchSourceProvider(AbstractSourceProvider).fireSourceChanged(int, Map) line: 99	
	WorkbenchSourceProvider.access$14(WorkbenchSourceProvider, int, Map) line: 1	
	WorkbenchSourceProvider$6.handleEvent(Event) line: 772	
	EventTable.sendEvent(Event) line: 84	
	Display.filterEvent(Event) line: 1484	
	Shell(Widget).sendEvent(Event) line: 1275	
	Shell(Widget).sendEvent(int, Event, boolean) line: 1300	
	Shell(Widget).sendEvent(int) line: 1281	
	Shell.filterProc(long, long, long) line: 731	
	Display.filterProc(long, long, long) line: 1496	
	OS._g_main_context_iteration(long, boolean) line: not available [native method]	
	OS.g_main_context_iteration(long, boolean) line: 2342	
	Display.readAndDispatch() line: 3184	
	ModalContext$ModalContextThread.block() line: 173	
	ModalContext.run(IRunnableWithProgress, boolean, IProgressMonitor, Display) line: 388	
	ProgressMonitorJobsDialog(ProgressMonitorDialog).run(boolean, boolean, IRunnableWithProgress) line: 507	
	ProgressMonitorJobsDialog.run(boolean, boolean, IRunnableWithProgress) line: 275	
	ProgressManager.run(boolean, boolean, IRunnableWithProgress) line: 1162	
	CreateRepresentationAction.run() line: 136	
	CreateRepresentationAction(Action).runWithEvent(Event) line: 498	
	ActionContributionItem.handleWidgetSelection(Event, boolean) line: 584	
	ActionContributionItem.access$2(ActionContributionItem, Event, boolean) line: 501	
	ActionContributionItem$5.handleEvent(Event) line: 411	
	EventTable.sendEvent(Event) line: 84	
	MenuItem(Widget).sendEvent(Event) line: 1276	
	MenuItem(Widget).sendEvent(int, Event, boolean) line: 1300	
	MenuItem(Widget).sendEvent(int, Event) line: 1285	
	MenuItem(Widget).notifyListeners(int, Event) line: 1079	
	AbstractSWTBot$2.run() line: 159	
	...
	UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 135	
	Display.runAsyncMessages(boolean) line: 3537	
	Display.readAndDispatch() line: 3189	
	Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2701	
	Workbench.runUI() line: 2665	
	Workbench.access$4(Workbench) line: 2499	
	Workbench$7.run() line: 679	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 668	
	PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149	
	IDEApplication.start(IApplicationContext) line: 124	
	UITestApplication.start(IApplicationContext) line: 54	
	EclipseAppHandle.run(Object) line: 196	
	EclipseAppLauncher.runApplication(Object) line: 110	
	EclipseAppLauncher.start(Object) line: 79	
	EclipseStarter.run(Object) line: 353	
	EclipseStarter.run(String[], Runnable) line: 180	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43	
	Method.invoke(Object, Object...) line: 622	
	Main.invokeFramework(String[], URL[]) line: 629	
	Main.basicRun(String[]) line: 584	
	Main.run(String[]) line: 1438	
	Main.main(String[]) line: 1414