private <T extends XBreakpointProperties> void addBreakpoint(final XBreakpointBase<?, T, ?> breakpoint, final boolean defaultBreakpoint,
                                                               boolean initUI) {
    XBreakpointType type = breakpoint.getType();

    withLockMaybeCancellable(myLock, () -> {
      if (defaultBreakpoint) {
        myDefaultBreakpoints.computeIfAbsent(type, k -> new LinkedHashSet<>()).add(breakpoint);
      }
      else {
        myBreakpoints.putValue(type, breakpoint);
        if (initUI) {
          BreakpointsUsageCollector.reportNewBreakpoint(breakpoint, type, getDebuggerManager().getCurrentSession() != null);
        }
      }
      myAllBreakpoints.add(breakpoint);
      if (breakpoint instanceof XLineBreakpointImpl) {
        myLineBreakpointManager.registerBreakpoint((XLineBreakpointImpl)breakpoint, initUI);
      }
    });
    sendBreakpointEvent(type, listener -> listener.breakpointAdded(breakpoint));
  }
private <T extends XBreakpointProperties> void addBreakpoint(final XBreakpointBase<?, T, ?> breakpoint, final boolean defaultBreakpoint,
                                                               boolean initUI)