diff --git a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java index fe6c7dcd0182..b5f26e014a57 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java @@ -15,9 +15,14 @@ */ package com.intellij.ui; +import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.impl.ApplicationInfoImpl; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.util.ImageLoader; import com.intellij.util.ui.UIUtil; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -45,4 +50,18 @@ public class AppUIUtil { public static void updateDialogIcon(final JDialog dialog) { UIUtil.updateDialogIcon(dialog, getAppIconImages()); } + + public static void invokeLaterIfProjectAlive(@NotNull final Project project, @NotNull final Runnable runnable) { + final Application application = ApplicationManager.getApplication(); + if (application.isDispatchThread()) { + runnable.run(); + } else { + application.invokeLater(runnable, new Condition() { + @Override + public boolean value(Object o) { + return (! project.isOpen()) || project.isDisposed(); + } + }); + } + } } diff --git a/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java b/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java index 61d175b758e0..dbcc179d14bb 100644 --- a/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java +++ b/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java @@ -25,6 +25,7 @@ import com.intellij.openapi.vcs.VcsVFSListener; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileEvent; +import com.intellij.ui.AppUIUtil; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.VcsUtil; import git4idea.GitUtil; @@ -150,7 +151,7 @@ public class GitVFSListener extends VcsVFSListener { } } addedFiles.retainAll(retainedFiles); - UIUtil.invokeLaterIfNeeded(new Runnable() { + AppUIUtil.invokeLaterIfProjectAlive(myProject, new Runnable() { @Override public void run() { originalExecuteAdd(addedFiles, copiedFiles);