[ 
https://issues.apache.org/jira/browse/SLING-3753?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stefan Egli resolved SLING-3753.
--------------------------------

    Resolution: Fixed

Fixed.

The root cause was in the way eclipse handles the elementMap in the 
CommonViewer/TreeViewer: upon a structural change, it figured the node was no 
longer equal and disposed the element - while still keeping it in the 
elementMap for some reason. This discrepancy later turned into the 'Widget is 
disposed' exception when the changed node was expanded for example.

To avoid this, the tree elements (ie the JcrNode) now are regarded as 'equals 
(same hashCode)' as long as the node itself is equal, irrespective of the 
children.

This way, we're no longer running into what I consider a bug with the 
elementMap.

> Avoid 'Widget is disposed' errors
> ---------------------------------
>
>                 Key: SLING-3753
>                 URL: https://issues.apache.org/jira/browse/SLING-3753
>             Project: Sling
>          Issue Type: Bug
>          Components: IDE
>    Affects Versions: Sling Eclipse IDE 1.0.0
>            Reporter: Stefan Egli
>            Assignee: Stefan Egli
>             Fix For: Sling Eclipse IDE 1.0.2
>
>
> In the Project Explorer, when fiddling around with the content browser by eg 
> copy/pasting, drag-dropping, changing node types etc, it sometimes can occur, 
> that when selecting a (jcr) node, an error box saying "Widget is disposed" 
> shows up.
> Below is the full stacktrace for reference:
> {code}
> org.eclipse.swt.SWTException: Widget is disposed
>       at org.eclipse.swt.SWT.error(SWT.java:4397)
>       at org.eclipse.swt.SWT.error(SWT.java:4312)
>       at org.eclipse.swt.SWT.error(SWT.java:4283)
>       at org.eclipse.swt.widgets.Widget.error(Widget.java:783)
>       at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:573)
>       at org.eclipse.swt.widgets.Widget.getData(Widget.java:845)
>       at 
> org.eclipse.jface.viewers.AbstractTreeViewer.associate(AbstractTreeViewer.java:712)
>       at 
> org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:1022)
>       at 
> org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:485)
>       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
>       at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
>       at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
>       at 
> org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2167)
>       at 
> org.eclipse.jface.viewers.StructuredViewer.internalUpdate(StructuredViewer.java:2150)
>       at 
> org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.java:2089)
>       at org.eclipse.jface.viewers.ColumnViewer.update(ColumnViewer.java:561)
>       at org.eclipse.ui.navigator.CommonViewer.update(CommonViewer.java:535)
>       at 
> org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.java:2033)
>       at 
> org.eclipse.jface.viewers.StructuredViewer.handleLabelProviderChanged(StructuredViewer.java:1191)
>       at 
> org.eclipse.ui.navigator.CommonViewer.handleLabelProviderChanged(CommonViewer.java:235)
>       at 
> org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged(ContentViewer.java:97)
>       at 
> org.eclipse.jface.viewers.BaseLabelProvider$1.run(BaseLabelProvider.java:74)
>       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
>       at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
>       at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
>       at 
> org.eclipse.jface.viewers.BaseLabelProvider.fireLabelProviderChanged(BaseLabelProvider.java:72)
>       at 
> org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider$1.labelProviderChanged(DecoratingStyledCellLabelProvider.java:77)
>       at 
> org.eclipse.ui.internal.decorators.DecoratorManager$1.run(DecoratorManager.java:430)
>       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
>       at 
> org.eclipse.ui.internal.decorators.DecoratorManager.fireListener(DecoratorManager.java:428)
>       at 
> org.eclipse.ui.internal.decorators.DecorationScheduler$3.runInUIThread(DecorationScheduler.java:530)
>       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:3976)
>       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3653)
>       at 
> org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
>       at 
> org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
>       at 
> org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
>       at 
> org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:140)
>       at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:611)
>       at 
> org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
>       at 
> org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
>       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
>       at 
> org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
>       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:354)
>       at 
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
>       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
>       at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
>       at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to