Skip to content

Commit

Permalink
Merge pull request #3340 from mehmet-karaman/3339_NPE_caused_by_null_…
Browse files Browse the repository at this point in the history
…defaultImage_in_XtextEditorTickUpdater

> #3339 NPE caused by null defaultImage in XtextEditorTickUpdater (updateEditorImage)
  • Loading branch information
LorenzoBettini authored Feb 11, 2025
2 parents ab35a23 + fc5f46d commit 37d4386
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<Annotation> overrideIndicatorAnnotations = Sets.newHashSet();

private Job currentJob;
Expand Down Expand Up @@ -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<Annotation, Position> annotationToPosition = xtextDocument
.readOnly(new CancelableUnitOfWork<Map<Annotation, Position>, XtextResource>() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}
}

Expand Down Expand Up @@ -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);
}
}
}
Expand All @@ -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);
}
}
}
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 37d4386

Please sign in to comment.