From 98965d674ba60cb3bfcc897af98510d6b42cefbb Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 19 May 2015 15:02:31 +0200 Subject: [PATCH] during forceUpdate contribute to other indexed projects only from time to time (IDEA-139951) --- .../src/com/intellij/util/indexing/FileBasedIndexImpl.java | 5 ++++- .../com/intellij/util/indexing/ProjectFilesCondition.java | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index 985df34bb113..a68926b084fc 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -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 allFilesToUpdate = getAllFilesToUpdate(); if (!allFilesToUpdate.isEmpty()) { + boolean includeFilesFromOtherProjects = (myForceUpdateRequests.incrementAndGet() & 0x3F) == 0; List virtualFilesToBeUpdatedForProject = ContainerUtil.filter( allFilesToUpdate, - new ProjectFilesCondition(projectIndexableFiles(project), filter, restrictedTo) + new ProjectFilesCondition(projectIndexableFiles(project), filter, restrictedTo, + includeFilesFromOtherProjects) ); if (!virtualFilesToBeUpdatedForProject.isEmpty()) { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/ProjectFilesCondition.java b/platform/lang-impl/src/com/intellij/util/indexing/ProjectFilesCondition.java index a98111f1b0f3..92b3c219e953 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/ProjectFilesCondition.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/ProjectFilesCondition.java @@ -29,10 +29,15 @@ class ProjectFilesCondition implements Condition { 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