@Deprecated
  public synchronized // synchronized to avoid concurrent access to quickFix* fields; TODO rework to lock-free
  void registerFix(@Nullable IntentionAction action,
                          @Nullable List<? extends IntentionAction> options,
                          @Nullable @Nls String displayName,
                          @Nullable TextRange fixRange,
                          @Nullable HighlightDisplayKey key) {
    if (action == null) return;
    if (fixRange == null) fixRange = new TextRange(getActualStartOffset(), getActualEndOffset());
    if (quickFixActionRanges == null) {
      quickFixActionRanges = ContainerUtil.createLockFreeCopyOnWriteList();
    }
    IntentionActionDescriptor desc =
      new IntentionActionDescriptor(action, options, displayName, null, key, getProblemGroup(), getSeverity());
    quickFixActionRanges.add(Pair.create(desc, fixRange));
    if (fixMarker != null && fixMarker.isValid()) {
      this.fixRange = TextRangeScalarUtil.toScalarRange(fixMarker);
    }
    else {
      RangeMarker fixMarker = this.fixMarker;
      RangeHighlighterEx highlighter = this.highlighter;
      Document document = fixMarker != null ? fixMarker.getDocument() :
                          highlighter != null ? highlighter.getDocument() :
                          quickFixActionMarkers != null && !quickFixActionMarkers.isEmpty() && quickFixActionMarkers.get(0).getSecond() != null ? quickFixActionMarkers.get(0).getSecond().getDocument() :
                          null;
      if (document != null) {
        // coerce fixRange inside document
        int newEnd = Math.min(document.getTextLength(), TextRangeScalarUtil.endOffset(this.fixRange));
        int newStart = Math.min(newEnd, TextRangeScalarUtil.startOffset(this.fixRange));
        this.fixRange = TextRangeScalarUtil.toScalarRange(newStart, newEnd);
      }
    }
    this.fixRange = TextRangeScalarUtil.union(this.fixRange, TextRangeScalarUtil.toScalarRange(fixRange));
    if (action instanceof HintAction) {
      setHint(true);
    }
    RangeHighlighterEx myHighlighter = highlighter;
    if (myHighlighter != null && myHighlighter.isValid()) {
      // highlighter already has been created, we need to update quickFixActionMarkers
      long highlighterRange = TextRangeScalarUtil.toScalarRange(myHighlighter);
      Long2ObjectMap<RangeMarker> cache = reuseRangeMarkerCacheIfCreated(highlighterRange);
      updateQuickFixFields(myHighlighter.getDocument(), cache, highlighterRange);
    }
  }
@Deprecated
  public synchronized // synchronized to avoid concurrent access to quickFix* fields; TODO rework to lock-free
  void registerFix(@Nullable IntentionAction action,
                          @Nullable List<? extends IntentionAction> options,
                          @Nullable @Nls String displayName,
                          @Nullable TextRange fixRange,
                          @Nullable HighlightDisplayKey key)