void (PerformanceWatcher.Snapshot snapshot, ProjectScanningHistoryImpl scanningHistory, CheckCancelOnlyProgressIndicator indicator, IndexingProgressReporter progressReporter, Ref<StatusMark> markRef) { markStage(scanningHistory, ProjectScanningHistoryImpl.Stage.DelayedPushProperties, true); try { if (myPusher instanceof PushedFilePropertiesUpdaterImpl) { ((PushedFilePropertiesUpdaterImpl)myPusher).performDelayedPushTasks(); } } finally { markStage(scanningHistory, ProjectScanningHistoryImpl.Stage.DelayedPushProperties, false); } LOG.info(snapshot.getLogResponsivenessSinceCreationMessage("Performing delayed pushing properties tasks for " + myProject.getName())); snapshot = PerformanceWatcher.takeSnapshot(); if (isFullIndexUpdate()) { myIndex.clearIndicesIfNecessary(); } List<IndexableFilesIterator> orderedProviders; markStage(scanningHistory, ProjectScanningHistoryImpl.Stage.CreatingIterators, true); try { if (myPredefinedIndexableFilesIterators == null) { Pair<@NotNull List<IndexableFilesIterator>, @NotNull StatusMark> pair = collectProviders(myProject, myIndex); orderedProviders = pair.getFirst(); markRef.set(pair.getSecond()); } else { orderedProviders = myPredefinedIndexableFilesIterators; } } finally { markStage(scanningHistory, ProjectScanningHistoryImpl.Stage.CreatingIterators, false); } markStage(scanningHistory, ProjectScanningHistoryImpl.Stage.CollectingIndexableFiles, true); try { collectIndexableFilesConcurrently(myProject, indicator, progressReporter, orderedProviders, scanningHistory); if (isFullIndexUpdate()) { myProject.putUserData(CONTENT_SCANNED, true); } } finally { markStage(scanningHistory, ProjectScanningHistoryImpl.Stage.CollectingIndexableFiles, false); } String scanningCompletedMessage = getLogScanningCompletedStageMessage(scanningHistory); LOG.info(snapshot.getLogResponsivenessSinceCreationMessage(scanningCompletedMessage)); }