private void iterateScopes(@NotNull DataHolder dataHolder,
                             @NotNull List<? extends VcsModifiableDirtyScope> scopes,
                             @NotNull ProgressIndicator indicator) {
    ChangeListUpdater updater = dataHolder.getChangeListUpdater();
    FileHolderComposite composite = dataHolder.getComposite();
    Supplier<Boolean> disposedGetter = () -> myProject.isDisposed() || myUpdater.isStopped();

    List<Supplier<@Nullable JComponent>> additionalInfos = new ArrayList<>();

    dataHolder.notifyStart();
    try {
      for (VcsModifiableDirtyScope scope : scopes) {
        indicator.checkCanceled();

        // do actual requests about file statuses
        UpdatingChangeListBuilder builder = new UpdatingChangeListBuilder(scope, updater, composite, disposedGetter);
        actualUpdate(builder, scope, dataHolder, updater, indicator);
        additionalInfos.addAll(builder.getAdditionalInfo());

        synchronized (myDataLock) {
          if (myUpdateException != null) break;
        }
      }
    }
    finally {
      dataHolder.notifyEnd();
    }

    synchronized (myDataLock) {
      myAdditionalInfo = additionalInfos;
    }
  }
private void iterateScopes(@NotNull DataHolder dataHolder,
                             @NotNull List<? extends VcsModifiableDirtyScope> scopes,
                             @NotNull ProgressIndicator indicator)