From 024978ca0eb7ef7c46a1c561e2f09a047c49643f Mon Sep 17 00:00:00 2001 From: Andrey Loskutov Date: Thu, 18 Oct 2018 11:19:01 +0200 Subject: Bug 540242 - SWTException in InternalTreeModelViewer.getDisplay ElementMementoRequest should not try to call done() on already disposed viewer Change-Id: I09276f7f001a4c1725519183ee1a05d8485c6fb2 Signed-off-by: Andrey Loskutov --- .../ui/viewers/model/ElementMementoRequest.java | 22 ++++++++++------------ .../ui/viewers/model/InternalTreeModelViewer.java | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) (limited to 'org.eclipse.debug.ui') diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java index 08d25f392..6bbcfb24f 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java @@ -18,6 +18,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRe import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer; import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.jface.viewers.TreePath; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IMemento; /** @@ -45,23 +46,20 @@ class ElementMementoRequest extends MementoUpdate implements IElementMementoRequ fDelta = delta; } - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IProgressMonitor#done() - */ @Override public void done() { - ITreeModelViewer viewer = getContentProvider().getViewer(); - if (viewer == null) - { - return; // disposed + if (viewer == null) { + return; // disposed } - if (viewer.getDisplay().getThread() == Thread.currentThread()) { - doComplete(); - } else { - viewer.getDisplay().asyncExec(() -> doComplete()); + Display display = viewer.getDisplay(); + if (display != null) { + if (display.getThread() == Thread.currentThread()) { + doComplete(); + } else { + display.asyncExec(this::doComplete); + } } - } private void doComplete() { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java index b5ef7ce09..b6fab9a4b 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java @@ -1424,7 +1424,7 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree @Override public Display getDisplay() { Control control = getControl(); - if (control != null) { + if (control != null && !control.isDisposed()) { return control.getDisplay(); } return null; -- cgit v1.2.3