diff --git a/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java b/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java index fc0b917cd8c0..55e9f3b39ebe 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/IndexingStamp.java @@ -509,6 +509,22 @@ public final class IndexingStamp { public static void flushCache(@Nullable Integer finishedFile) { if (finishedFile != null && finishedFile == INVALID_FILE_ID) finishedFile = 0; + + if (finishedFile != null) { + Lock readLock = getStripedLock(finishedFile).readLock(); + readLock.lock(); + try { + Timestamps timestamps = ourTimestampsCache.get(finishedFile); + if (timestamps == null) return; + if (!timestamps.isDirty()) { + ourTimestampsCache.remove(finishedFile); + return; + } + } finally { + readLock.unlock(); + } + } + // todo make better (e.g. FinishedFiles striping, remove integers) while (finishedFile == null || !ourFinishedFiles.offer(finishedFile)) { List files = new ArrayList<>(ourFinishedFiles.size()); diff --git a/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesFinder.java b/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesFinder.java index 06726aed6f69..60d56c87fa8a 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesFinder.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesFinder.java @@ -60,8 +60,9 @@ final class UnindexedFilesFinder implements VirtualFileFilter { IndexedFileImpl indexedFile = new IndexedFileImpl(file, myProject); if (file instanceof VirtualFileSystemEntry && ((VirtualFileSystemEntry)file).isFileIndexed()) { + int inputId = Math.abs(FileBasedIndexImpl.getIdMaskingNonIdBasedFile(file)); + if (myRunExtensionsForFilesMarkedAsIndexed && myShouldProcessUpToDateFiles) { - int inputId = Math.abs(FileBasedIndexImpl.getIdMaskingNonIdBasedFile(file)); List> ids = IndexingStamp.getNontrivialFileIndexedStates(inputId); for (FileBasedIndexInfrastructureExtension.FileIndexingStatusProcessor processor : myStateProcessors) { for (ID id : ids) { @@ -74,6 +75,7 @@ final class UnindexedFilesFinder implements VirtualFileFilter { } } if (!shouldIndexFile.get()) { + IndexingStamp.flushCache(inputId); return false; } }