during forceUpdate contribute to other indexed projects only from time to time (IDEA-139951)

This commit is contained in:
Maxim.Mossienko
2015-05-19 15:04:23 +02:00
parent 94080a8620
commit 98965d674b
2 changed files with 10 additions and 2 deletions
@@ -2206,6 +2206,7 @@ public class FileBasedIndexImpl extends FileBasedIndex {
}
private final VirtualFileUpdateTask myForceUpdateTask = new VirtualFileUpdateTask();
private final AtomicInteger myForceUpdateRequests = new AtomicInteger();
private void forceUpdate(@Nullable Project project, @Nullable final GlobalSearchScope filter, @Nullable final VirtualFile restrictedTo) {
myChangedFilesCollector.tryToEnsureAllInvalidateTasksCompleted();
@@ -2213,9 +2214,11 @@ public class FileBasedIndexImpl extends FileBasedIndex {
Collection<VirtualFile> allFilesToUpdate = getAllFilesToUpdate();
if (!allFilesToUpdate.isEmpty()) {
boolean includeFilesFromOtherProjects = (myForceUpdateRequests.incrementAndGet() & 0x3F) == 0;
List<VirtualFile> virtualFilesToBeUpdatedForProject = ContainerUtil.filter(
allFilesToUpdate,
new ProjectFilesCondition(projectIndexableFiles(project), filter, restrictedTo)
new ProjectFilesCondition(projectIndexableFiles(project), filter, restrictedTo,
includeFilesFromOtherProjects)
);
if (!virtualFilesToBeUpdatedForProject.isEmpty()) {
@@ -29,10 +29,15 @@ class ProjectFilesCondition implements Condition<VirtualFile> {
public ProjectFilesCondition(FileBasedIndexImpl.ProjectIndexableFilesFilter indexableFilesFilter,
GlobalSearchScope filter,
VirtualFile restrictedTo) {
VirtualFile restrictedTo,
boolean includeFilesFromOtherProjects
) {
myRestrictedTo = restrictedTo;
myFilter = filter;
myIndexableFilesFilter = indexableFilesFilter;
if (!includeFilesFromOtherProjects) {
myFilesFromOtherProjects = MAX_FILES_TO_UPDATE_FROM_OTHER_PROJECT;
}
}
@Override