From 26248b6cf44fed25e76ca46bd08520b892e7099e Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Sun, 13 Mar 2016 19:05:42 +0100 Subject: [PATCH] remove duplicates from files to be indexed (related to WEB-20651) --- .../com/intellij/util/indexing/FileBasedIndexImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 115023f1657d..52ed4a0da457 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -2101,9 +2101,17 @@ public class FileBasedIndexImpl extends FileBasedIndex { // When processing roots concurrently myFiles looses the local order of local vs archive files // If we process the roots in 2 threads we can just separate local vs archive + // IMPORTANT: also remove duplicated file that can appear due to roots intersection + BitSet usedFileIds = new BitSet(files.size()); List localFileSystemFiles = new ArrayList(files.size() / 2); List archiveFiles = new ArrayList(files.size() / 2); + for(VirtualFile file:files) { + int fileId = ((VirtualFileWithId)file).getId(); + if (fileId > 0) { + if (usedFileIds.get(fileId)) continue; + usedFileIds.set(fileId); + } if (file.getFileSystem() instanceof LocalFileSystem) localFileSystemFiles.add(file); else archiveFiles.add(file); } @@ -2408,7 +2416,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { @Override public void run() { if (project.isDisposed() || module.isDisposed() || !root.isValid()) return; - iterateRecursively(root, processor, indicator, null, projectFileIndex); + iterateRecursively(root, processor, indicator, visitedRoots, projectFileIndex); } }); }