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