diff --git a/platform/lang-api/src/com/intellij/psi/stubs/SerializationManager.java b/platform/lang-api/src/com/intellij/psi/stubs/SerializationManager.java index 28005a53a0b9..b41a9d41306d 100644 --- a/platform/lang-api/src/com/intellij/psi/stubs/SerializationManager.java +++ b/platform/lang-api/src/com/intellij/psi/stubs/SerializationManager.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.io.OutputStream; public abstract class SerializationManager { + public static SerializationManager getInstance() { return ApplicationManager.getApplication().getComponent(SerializationManager.class); } @@ -40,4 +41,6 @@ public abstract class SerializationManager { public abstract boolean isNameStorageCorrupted(); public abstract void repairNameStorage(); + + public abstract void flushNameStorage(); } \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/psi/stubs/SerializationManagerImpl.java b/platform/lang-api/src/com/intellij/psi/stubs/SerializationManagerImpl.java index ecce3a64bec5..fae41bcbeae2 100644 --- a/platform/lang-api/src/com/intellij/psi/stubs/SerializationManagerImpl.java +++ b/platform/lang-api/src/com/intellij/psi/stubs/SerializationManagerImpl.java @@ -111,6 +111,11 @@ public class SerializationManagerImpl extends SerializationManager implements Ap } } + @Override + public void flushNameStorage() { + myNameStorage.force(); + } + public void registerSerializer(@NotNull StubSerializer serializer) { myAllSerializers.add(serializer); try { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java index 5dfcd5773bbc..13d8ff5168e8 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java @@ -636,6 +636,10 @@ public class FileBasedIndex implements ApplicationComponent { requestRebuild(indexId); } } + + if (!HeavyProcessLatch.INSTANCE.isRunning() && modCount == myLocalModCount) { // do not interfere with 'main' jobs + SerializationManager.getInstance().flushNameStorage(); + } } /**