@Override
    protected void exportDone(@NotNull JComponent source, @Nullable Transferable data, int action) {
      if (data == null) return;

      Component last = DnDManager.getInstance().getLastDropHandler();

      if (last != null) {
        if (!(last instanceof EditorComponentImpl) && !(last instanceof EditorGutterComponentImpl)) {
          return;
        }
        if (last != source && Boolean.TRUE.equals(DISABLE_REMOVE_ON_DROP.get(getEditor((JComponent)last)))) {
          return;
        }
      }

      EditorImpl editor = getEditor(source);
      if (action == MOVE && !editor.isViewer() && editor.myDraggedRange != null) {
        ((TransactionGuardImpl)TransactionGuard.getInstance()).performUserActivity(() -> removeDraggedOutFragment(editor));
      }

      editor.clearDnDContext();

      // IDEA-316937 Project leak via TransferHandler$SwingDragGestureRecognizer.
      // This is a dirty, makeshift solution.
      // Swing limits us because javax.swing.TransferHandler.recognizer
      // is a private field, and we cannot reset its value to null to avoid the memory leak.
      // To prevent project leaks, we pass a contextless componentStub for it to replace the previous value of the recognizer field.
      if (source != componentStub) {
        exportAsDrag(componentStub, mouseEventStub, MOVE);
      }
    }
@Override
    protected void exportDone(@NotNull JComponent source, @Nullable Transferable data, int action)