@Override
  public void perform(@NotNull final Project project, final AnActionEvent event) {
    Editor editor = event.getData(CommonDataKeys.EDITOR);
    boolean isFromGutterClick = event.getData(XLineBreakpointManager.BREAKPOINT_LINE_KEY) != null;
    InputEvent inputEvent = event.getInputEvent();
    boolean isAltClick = isFromGutterClick && inputEvent != null && inputEvent.isAltDown();
    boolean isShiftClick = isFromGutterClick && inputEvent != null && inputEvent.isShiftDown();

    // do not toggle more than once on the same line
    Set<Integer> processedLines = new HashSet<>();
    for (XSourcePosition position : ToggleLineBreakpointAction.getAllPositionsForBreakpoints(project, event.getDataContext())) {
      if (processedLines.add(position.getLine())) {
        XBreakpointUtil.toggleLineBreakpoint(project,
                                             position,
                                             !isFromGutterClick,
                                             editor,
                                             isAltClick || myTemporary,
                                             !isFromGutterClick,
                                             !isFromGutterClick || (!isShiftClick && !Registry.is("debugger.click.disable.breakpoints")))
          .onSuccess(breakpoint -> {
            if (!isFromGutterClick) return;
            setupLogBreakpoint(breakpoint, inputEvent, editor, project);
          });
      }
    }
  }
@Override
  public void perform(@NotNull final Project project, final AnActionEvent event)