diff --git a/platform/core-impl/src/com/intellij/util/indexing/IndexedFileImpl.java b/platform/core-impl/src/com/intellij/util/indexing/IndexedFileImpl.java index 066302cde76e..96ae1c1d3d70 100644 --- a/platform/core-impl/src/com/intellij/util/indexing/IndexedFileImpl.java +++ b/platform/core-impl/src/com/intellij/util/indexing/IndexedFileImpl.java @@ -20,10 +20,6 @@ public class IndexedFileImpl extends UserDataHolderBase implements IndexedFile { private final @Nullable FileType myType; - public IndexedFileImpl(@NotNull VirtualFile file) { - this(file, null); - } - public IndexedFileImpl(@NotNull VirtualFile file, Project project) { this(file, null, project); } 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 a2dc1fcc4690..cab4524e7b50 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -1372,14 +1372,16 @@ public final class FileBasedIndexImpl extends FileBasedIndexEx { Set> indexesProvidedByExtensions = new HashSet<>(); Ref wasFullyIndexedByInfrastructureExtensions = Ref.create(true); Ref fileTypeRef = Ref.create(); - Project guessedProject = project != null ? project : ProjectUtil.guessProjectForFile(file); + + //todo check file still from project + int inputId = getFileId(file); + Project guessedProject = project != null ? project : myIndexableFilesFilterHolder.findProjectForFile(inputId); IndexedFileImpl indexedFile = new IndexedFileImpl(file, guessedProject); FileTypeManagerEx.getInstanceEx().freezeFileTypeTemporarilyIn(file, () -> { ProgressManager.checkCanceled(); FileContentImpl fc = null; - int inputId = getFileId(file); Set> currentIndexedStates = new HashSet<>(IndexingStamp.getNontrivialFileIndexedStates(inputId)); List> affectedIndexCandidates = getAffectedIndexCandidates(indexedFile); //noinspection ForLoopReplaceableByForEach @@ -1648,8 +1650,7 @@ public final class FileBasedIndexImpl extends FileBasedIndexEx { boolean includeFilesFromOtherProjects = restrictedTo == null && project == null; List virtualFilesToBeUpdatedForProject = ContainerUtil.filter( allFilesToUpdate, - new ProjectFilesCondition(projectIndexableFiles(project), filter, restrictedTo, - includeFilesFromOtherProjects) + new ProjectFilesCondition(projectIndexableFiles(project), filter, restrictedTo, includeFilesFromOtherProjects) ); if (!virtualFilesToBeUpdatedForProject.isEmpty()) { @@ -1789,7 +1790,7 @@ public final class FileBasedIndexImpl extends FileBasedIndexEx { // handle 'content-less' indices separately boolean fileIsDirectory = file.isDirectory(); - IndexedFileImpl indexedFile = new IndexedFileImpl(file, ProjectUtil.guessProjectForFile(file)); + IndexedFileImpl indexedFile = new IndexedFileImpl(file, myIndexableFilesFilterHolder.findProjectForFile(fileId)); if (!contentChange) { FileContent fileContent = null; diff --git a/platform/lang-impl/src/com/intellij/util/indexing/projectFilter/ProjectIndexableFilesFilterHolder.kt b/platform/lang-impl/src/com/intellij/util/indexing/projectFilter/ProjectIndexableFilesFilterHolder.kt index ed6fc03c1d45..4b86071b3a06 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/projectFilter/ProjectIndexableFilesFilterHolder.kt +++ b/platform/lang-impl/src/com/intellij/util/indexing/projectFilter/ProjectIndexableFilesFilterHolder.kt @@ -32,6 +32,8 @@ internal sealed class ProjectIndexableFilesFilterHolder { abstract fun removeFile(fileId: Int) + abstract fun findProjectForFile(fileId: Int): Project? + abstract fun runHealthCheck() } @@ -84,6 +86,15 @@ internal class IncrementalProjectIndexableFilesFilterHolder : ProjectIndexableFi } } + override fun findProjectForFile(fileId: Int): Project? { + for ((project, filter) in myProjectFilters) { + if (filter.containsFileId(fileId)) { + return project + } + } + return null + } + override fun runHealthCheck() { for ((project, filter) in myProjectFilters) { val errors = ReadAction