From b25a6e0deb8a1e45cbed7a598b47005a78a35fb0 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Tue, 21 Aug 2012 20:00:18 +0400 Subject: [PATCH] Clear installed packages cache if files under SDK paths had been modified (PY-6767) --- .../packaging/PyPackageManagerImpl.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index c58e51fbb468..165eee2f38f6 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -16,16 +16,21 @@ import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkAdditionalData; +import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.vfs.newvfs.BulkFileListener; +import com.intellij.openapi.vfs.newvfs.events.VFileEvent; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.SystemProperties; +import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.net.HttpConfigurable; import com.jetbrains.python.PyNames; import com.jetbrains.python.PythonHelpersLocator; @@ -290,6 +295,28 @@ public class PyPackageManagerImpl extends PyPackageManager { PyPackageManagerImpl(@NotNull Sdk sdk) { mySdk = sdk; + final Application app = ApplicationManager.getApplication(); + final MessageBusConnection connection = app.getMessageBus().connect(); + connection.subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() { + @Override + public void before(@NotNull List events) {} + + @Override + public void after(@NotNull List events) { + final VirtualFile[] roots = mySdk.getRootProvider().getFiles(OrderRootType.CLASSES); + for (VFileEvent event : events) { + final VirtualFile file = event.getFile(); + if (file != null) { + for (VirtualFile root : roots) { + if (VfsUtilCore.isAncestor(root, file, false)) { + clearCaches(); + return; + } + } + } + } + } + }); } public Sdk getSdk() {