private void doSetInitialBreakpointsAndResume(@NotNull final IsolateRef isolateRef) {
    final Set<XLineBreakpoint<XBreakpointProperties>> xBreakpoints =
        myBreakpointHandler.getXBreakpoints();

    if (xBreakpoints.isEmpty()) {
      myIsolatesInfo.setBreakpointsSet(isolateRef);
      checkInitialResume(isolateRef);
      return;
    }

    final AtomicInteger counter = new AtomicInteger(xBreakpoints.size());

    for (final XLineBreakpoint<XBreakpointProperties> xBreakpoint : xBreakpoints) {
      addBreakpoint(
          isolateRef.getId(),
          xBreakpoint.getSourcePosition(),
          new VmServiceConsumers.BreakpointConsumerWrapper() {
            @Override
            void sourcePositionNotApplicable() {
              checkDone();
            }

            @Override
            public void received(Breakpoint vmBreakpoint) {
              myBreakpointHandler.vmBreakpointAdded(xBreakpoint, isolateRef.getId(), vmBreakpoint);
              checkDone();
            }

            @Override
            public void onError(RPCError error) {
              myBreakpointHandler.breakpointFailed(xBreakpoint);
              checkDone();
            }

            private void checkDone() {
              if (counter.decrementAndGet() == 0) {
                myIsolatesInfo.setBreakpointsSet(isolateRef);
                checkInitialResume(isolateRef);
              }
            }
          });
    }
  }