void (@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); } }