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