@ApiStatus.Internal
  public void loadState(@NotNull BreakpointManagerState state) {
    // create default breakpoint without locking
    var defaultBreakpoints = createDefaultBreakpoints();

    // make sure that no RW lock is taken under myLock
    ApplicationManager.getApplication().runReadAction(() -> {
      withLockMaybeCancellable(myLock, () -> {
        myBreakpointsDialogSettings = state.getBreakpointsDialogProperties();

        myAllBreakpoints.clear();
        myDefaultBreakpoints.clear();
        myBreakpointsDefaults.clear();

        state.getDefaultBreakpoints().forEach(breakpointState -> loadBreakpoint(breakpointState, true));

        //noinspection unchecked
        StreamEx.of(defaultBreakpoints)
          .remove(b -> myDefaultBreakpoints.containsKey(b.getType()))
          .forEach(b -> addBreakpoint(b, true, false));

        List.copyOf(myBreakpoints.values()).forEach(this::doRemoveBreakpoint);

        ContainerUtil.notNullize(state.getBreakpoints()).forEach(breakpointState -> loadBreakpoint(breakpointState, false));

        for (BreakpointState defaults : state.getBreakpointsDefaults()) {
          XBreakpointType<?, ?> type = XBreakpointUtil.findType(defaults.getTypeId());
          if (type != null) {
            myBreakpointsDefaults.put(type, defaults);
          }
          else {
            LOG.warn("Unknown breakpoint type " + defaults.getTypeId());
          }
        }

        myDependentBreakpointManager.loadState();
        myLineBreakpointManager.updateBreakpointsUI();
        myDefaultGroup = state.getDefaultGroup();
        myFirstLoadDone = true;
      });
    });
  }
@ApiStatus.Internal
  public void loadState(@NotNull BreakpointManagerState state)