@RequiresEdt
  static void disposeWithFileLevelIgnoreErrors(@NotNull RangeHighlighter highlighter,
                                               @NotNull Project project,
                                               @NotNull HighlightInfo info) {
    if (info.isFileLevelAnnotation()) {
      DaemonCodeAnalyzerEx codeAnalyzer = DaemonCodeAnalyzerEx.getInstanceEx(project);
      PsiFile psiFile = PsiDocumentManager.getInstance(project).getCachedPsiFile(highlighter.getDocument());
      if (psiFile != null) {
        codeAnalyzer.removeFileLevelHighlight(psiFile, info);
      }
    }
    try {
      highlighter.dispose();
    }
    catch (Exception e) {
      // in theory, rogue plugin might register a listener on range marker 'dispose', which can do nasty things, including throwing exceptions,
      // but in highlighting, range highlighters must be removed no matter what, to avoid sticky highlighters, so ignore these exceptions
      LOG.warn(e);
    }
  }
@RequiresEdt
  static void disposeWithFileLevelIgnoreErrors(@NotNull RangeHighlighter highlighter,
                                               @NotNull Project project,
                                               @NotNull HighlightInfo info)