@SuppressWarnings("unchecked")
 protected Severity getSeverity(XtextEditor xtextEditor) {
   if (xtextEditor == null || xtextEditor.getInternalSourceViewer() == null) return null;
   IAnnotationModel model = xtextEditor.getInternalSourceViewer().getAnnotationModel();
   if (model != null) {
     Iterator<Annotation> iterator = model.getAnnotationIterator();
     boolean hasWarnings = false;
     boolean hasInfos = false;
     while (iterator.hasNext()) {
       Annotation annotation = iterator.next();
       if (!annotation.isMarkedDeleted()) {
         Issue issue = issueUtil.getIssueFromAnnotation(annotation);
         if (issue != null) {
           if (issue.getSeverity() == Severity.ERROR) {
             return Severity.ERROR;
           } else if (issue.getSeverity() == Severity.WARNING) {
             hasWarnings = true;
           } else if (issue.getSeverity() == Severity.INFO) {
             hasInfos = true;
           }
         }
       }
     }
     if (hasWarnings) return Severity.WARNING;
     if (hasInfos) return Severity.INFO;
   }
   return null;
 }
 @Override
 public void beforeDispose(XtextEditor xtextEditor) {
   unregisterListener();
   if (this.editor != null) {
     if (defaultImage != null && !defaultImage.isDisposed())
       editor.updatedTitleImage(defaultImage); // otherwise we'll leak the defaultImage
     this.editor = null;
   }
 }
 protected void updateEditorImage(XtextEditor xtextEditor) {
   Severity severity = getSeverity(xtextEditor);
   if (severity == previousSeverity) return;
   previousSeverity = severity;
   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);
     Image decoratedImage = imageHelper.getImage(decorationOverlayIcon);
     if (xtextEditor.getTitleImage() != decoratedImage) {
       scheduleUpdateEditorJob(decoratedImage);
     }
   } else {
     scheduleUpdateEditorJob(defaultImage);
   }
 }
 protected void updateImageAndRegisterListener() {
   defaultImage = editor.getDefaultImage();
   updateEditorImage(editor);
   annotationModel = editor.getInternalSourceViewer().getAnnotationModel();
   if (annotationModel != null) annotationModel.addAnnotationModelListener(this);
 }