diff --git a/org.eclipse.xtend.ide/src/org/eclipse/xtend/ide/editor/OverrideIndicatorModelListener.java b/org.eclipse.xtend.ide/src/org/eclipse/xtend/ide/editor/OverrideIndicatorModelListener.java index 07eb5f2d840..7833f3c5df0 100644 --- a/org.eclipse.xtend.ide/src/org/eclipse/xtend/ide/editor/OverrideIndicatorModelListener.java +++ b/org.eclipse.xtend.ide/src/org/eclipse/xtend/ide/editor/OverrideIndicatorModelListener.java @@ -62,7 +62,7 @@ public class OverrideIndicatorModelListener extends NullImpl implements IXtextMo public static final String JOB_NAME = "Override Indicator Updater"; private static ISchedulingRule SCHEDULING_RULE = SchedulingRuleFactory.INSTANCE.newSequence(); - private XtextEditor xtextEditor; + private volatile XtextEditor xtextEditor; private Set overrideIndicatorAnnotations = Sets.newHashSet(); private Job currentJob; @@ -124,12 +124,13 @@ public IStatus run(IProgressMonitor monitor) { } private IStatus updateAnnotationModel(IProgressMonitor monitor) { - if (xtextEditor == null || xtextEditor.getDocument() == null - || xtextEditor.getInternalSourceViewer().getAnnotationModel() == null) { + XtextEditor locXtextEditor = xtextEditor; + if (locXtextEditor == null || locXtextEditor.getDocument() == null + || locXtextEditor.getInternalSourceViewer().getAnnotationModel() == null) { return Status.OK_STATUS; } - IXtextDocument xtextDocument = xtextEditor.getDocument(); - IAnnotationModel annotationModel = xtextEditor.getInternalSourceViewer().getAnnotationModel(); + IXtextDocument xtextDocument = locXtextEditor.getDocument(); + IAnnotationModel annotationModel = locXtextEditor.getInternalSourceViewer().getAnnotationModel(); Map annotationToPosition = xtextDocument .readOnly(new CancelableUnitOfWork, XtextResource>() { @Override diff --git a/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/XtextEditorErrorTickUpdater.java b/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/XtextEditorErrorTickUpdater.java index 6c58d73942a..da47e5bec78 100644 --- a/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/XtextEditorErrorTickUpdater.java +++ b/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/XtextEditorErrorTickUpdater.java @@ -45,8 +45,8 @@ public class XtextEditorErrorTickUpdater extends IXtextEditorCallback.NullImpl i private IImageHelper imageHelper; @Inject private IssueUtil issueUtil; - private Image defaultImage; - private XtextEditor editor; + private volatile Image defaultImage; + private volatile XtextEditor editor; private IAnnotationModel annotationModel; @Override @@ -94,14 +94,17 @@ protected void updateImageAndRegisterListener() { protected void updateEditorImage(XtextEditor xtextEditor) { Severity severity = getSeverity(xtextEditor); - if (severity != null && severity != Severity.INFO) { - ImageDescriptor descriptor = severity == Severity.ERROR ? XtextPluginImages.DESC_OVR_ERROR - : XtextPluginImages.DESC_OVR_WARNING; - DecorationOverlayIcon decorationOverlayIcon = new DecorationOverlayIcon(defaultImage, descriptor, - IDecoration.BOTTOM_LEFT); - scheduleUpdateEditor(decorationOverlayIcon); - } else { - scheduleUpdateEditor(defaultImage); + Image locImage = defaultImage; + if (locImage != null && !locImage.isDisposed()) { + if (severity != null && severity != Severity.INFO) { + ImageDescriptor descriptor = severity == Severity.ERROR ? XtextPluginImages.DESC_OVR_ERROR + : XtextPluginImages.DESC_OVR_WARNING; + DecorationOverlayIcon decorationOverlayIcon = new DecorationOverlayIcon(locImage, descriptor, + IDecoration.BOTTOM_LEFT); + scheduleUpdateEditor(decorationOverlayIcon); + } else { + scheduleUpdateEditor(locImage); + } } } @@ -144,10 +147,11 @@ public void scheduleUpdateEditor(final ImageDescriptor titleImageDescription) { display.asyncExec(new Runnable() { @Override public void run() { - if (editor != null) { + XtextEditor locEditor = editor; + if (locEditor != null) { Image image = imageHelper.getImage(titleImageDescription); - if (editor.getTitleImage() != image) { - editor.updatedTitleImage(image); + if (locEditor.getTitleImage() != image) { + locEditor.updatedTitleImage(image); } } } @@ -163,9 +167,10 @@ public void scheduleUpdateEditor(final Image titleImage) { display.asyncExec(new Runnable() { @Override public void run() { - if (editor != null) { - if (editor.getTitleImage() != titleImage) { - editor.updatedTitleImage(titleImage); + XtextEditor locEditor = editor; + if (locEditor != null) { + if (locEditor.getTitleImage() != titleImage) { + locEditor.updatedTitleImage(titleImage); } } } @@ -210,16 +215,17 @@ public UpdateEditorImageJob(ISchedulingRule schedulingRule) { @Override public IStatus runInUIThread(final IProgressMonitor monitor) { - IEditorSite site = null != editor ? editor.getEditorSite() : null; + XtextEditor locEditor = editor; + IEditorSite site = null != locEditor ? locEditor.getEditorSite() : null; if (site != null) { - if (!monitor.isCanceled() && editor != null) { + if (!monitor.isCanceled() && locEditor != null) { if (titleImage != null && !titleImage.isDisposed()) { - editor.updatedTitleImage(titleImage); + locEditor.updatedTitleImage(titleImage); titleImage = null; } else if (titleImageDescription != null) { Image image = imageHelper.getImage(titleImageDescription); - if (editor.getTitleImage() != image) { - editor.updatedTitleImage(image); + if (locEditor.getTitleImage() != image) { + locEditor.updatedTitleImage(image); } titleImageDescription = null; }