diff options
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandler.java')
-rw-r--r-- | platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandler.java | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandler.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandler.java index efaf84d08b8e..98c3884cc993 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandler.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandler.java @@ -22,6 +22,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.util.NotNullLazyValue; +import com.intellij.openapi.util.ShutDownTracker; import com.intellij.openapi.util.io.FileAttributes; import com.intellij.openapi.util.io.FileSystemUtil; import com.intellij.openapi.util.io.FileUtil; @@ -30,6 +31,7 @@ import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VfsBundle; import com.intellij.openapi.vfs.impl.ZipHandler; import com.intellij.openapi.vfs.newvfs.persistent.FSRecords; +import com.intellij.openapi.vfs.newvfs.persistent.FlushingDaemon; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; import com.intellij.util.io.IOUtil; @@ -169,7 +171,6 @@ public class JarHandler extends ZipHandler { info = new CacheLibraryInfo(mirrorFile.getName(), originalAttributes.lastModified, originalAttributes.length); CacheLibraryInfo.ourCachedLibraryInfo.put(path, info); - CacheLibraryInfo.ourCachedLibraryInfo.force(); return mirrorFile; } catch (IOException ex) { @@ -260,6 +261,23 @@ public class JarHandler extends ZipHandler { } assert info != null; ourCachedLibraryInfo = info; + FlushingDaemon.everyFiveSeconds(new Runnable() { + @Override + public void run() { + flushCachedLibraryInfos(); + } + }); + + ShutDownTracker.getInstance().registerShutdownTask(new Runnable() { + @Override + public void run() { + flushCachedLibraryInfos(); + } + }); + } + + private static void flushCachedLibraryInfos() { + if (ourCachedLibraryInfo.isDirty()) ourCachedLibraryInfo.force(); } private CacheLibraryInfo(@NotNull String path, long time, long length) { |