private static void createOrReuseLineMarker(@NotNull LineMarkerInfo<?> info,
                                              @NotNull MarkupModelEx markupModel,
                                              @NotNull HighlightersRecycler toReuse) {
    LineMarkerInfo.LineMarkerGutterIconRenderer<?> newRenderer = (LineMarkerInfo.LineMarkerGutterIconRenderer<?>)info.createGutterRenderer();

    RangeHighlighterEx highlighter = toReuse.pickupHighlighterFromGarbageBin(info.startOffset, info.endOffset, HighlighterLayer.ADDITIONAL_SYNTAX);
    if (highlighter == null) {
      highlighter = markupModel.addRangeHighlighterAndChangeAttributes(
        null, info.startOffset, info.endOffset,
        HighlighterLayer.ADDITIONAL_SYNTAX, HighlighterTargetArea.LINES_IN_RANGE, false,
        changeAttributes(info, true, newRenderer, true, true));

      MarkupEditorFilter editorFilter = info.getEditorFilter();
      if (editorFilter != MarkupEditorFilter.EMPTY) {
        highlighter.setEditorFilter(editorFilter);
      }
    }
    else {
      LineMarkerInfo.LineMarkerGutterIconRenderer<?> oldRenderer = highlighter.getGutterIconRenderer() instanceof LineMarkerInfo.LineMarkerGutterIconRenderer<?> line ? line : null;
      boolean rendererChanged = newRenderer == null || !newRenderer.equals(oldRenderer);
      boolean lineSeparatorColorChanged = !Comparing.equal(highlighter.getLineSeparatorColor(), info.separatorColor);
      boolean lineSeparatorPlacementChanged = !Comparing.equal(highlighter.getLineSeparatorPlacement(), info.separatorPlacement);

      if (rendererChanged || lineSeparatorColorChanged || lineSeparatorPlacementChanged) {
        markupModel.changeAttributesInBatch(highlighter, changeAttributes(info, rendererChanged, newRenderer, lineSeparatorColorChanged, lineSeparatorPlacementChanged));
      }
      HighlightingMarkupGrave.Companion.unmarkZombieMarkup(highlighter);
    }
    highlighter.putUserData(LINE_MARKER_INFO, info);
    info.highlighter = highlighter;
  }
private static void createOrReuseLineMarker(@NotNull LineMarkerInfo<?> info,
                                              @NotNull MarkupModelEx markupModel,
                                              @NotNull HighlightersRecycler toReuse)