diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java index 7f1dc2435509..da03072428fc 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java @@ -57,6 +57,13 @@ public class StatusBarUpdater implements Disposable { updateLater(); } }); + + project.getMessageBus().connect().subscribe(DaemonCodeAnalyzer.DAEMON_EVENT_TOPIC, new DaemonCodeAnalyzer.DaemonListener() { + @Override + public void daemonFinished() { + updateLater(); + } + }); } private void updateLater() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java index 13b505597f61..c6c651faeded 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java @@ -34,10 +34,7 @@ import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.FileStatusListener; import com.intellij.openapi.vcs.FileStatusManager; @@ -53,6 +50,7 @@ import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -239,7 +237,7 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver { } pass.setProgressLimit(progressLimit); final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); - String oldInfo = saveStatusBarInfo(statusBar); + Pair oldInfo = saveStatusBarInfo(statusBar); try { for (final VirtualFile virtualFile : files) { progress.checkCanceled(); @@ -313,19 +311,21 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver { return true; } - private static String saveStatusBarInfo(final StatusBar statusBar) { - String oldInfo = null; + @Nullable + private static Pair saveStatusBarInfo(final StatusBar statusBar) { + Pair oldInfo = null; if (statusBar instanceof StatusBarEx) { - oldInfo = statusBar.getInfo(); + oldInfo = Pair.create(statusBar.getInfo(), ((StatusBarEx)statusBar).getInfoRequestor()); } + return oldInfo; } - private static void restoreStatusBarInfo(final StatusBar statusBar, final String oldInfo) { + private static void restoreStatusBarInfo(final StatusBar statusBar, final Pair oldInfo) { if (statusBar instanceof StatusBarEx) { LaterInvocator.invokeLater(new Runnable() { public void run() { - statusBar.setInfo(oldInfo); + statusBar.setInfo(oldInfo.first, oldInfo.second); } }); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java b/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java index c5bfcccec57a..f6920f33b941 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java @@ -50,4 +50,7 @@ public interface StatusBarEx extends StatusBar, Disposable { Dimension getSize(); boolean isVisible(); + + @Nullable + String getInfoRequestor(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java index 5b8093414a0e..babc5365212f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java @@ -103,6 +103,11 @@ public final class TestWindowManager extends WindowManagerEx implements Applicat public void setInfo(@Nullable String s, @Nullable String requestor) { } + @Override + public String getInfoRequestor() { + return null; + } + public boolean isVisible() { return false; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java index 8703a993e592..6ae6be7a762b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java @@ -23,6 +23,7 @@ import com.intellij.openapi.ui.popup.BalloonHandler; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.CustomStatusBarWidget; @@ -69,6 +70,7 @@ public class IdeStatusBarImpl extends JComponent implements StatusBarEx { private JPanel myCenterPanel; private String myInfo; + private String myRequestor; private List myCustomComponentIds = new ArrayList(); @@ -377,7 +379,9 @@ public class IdeStatusBarImpl extends JComponent implements StatusBarEx { UIUtil.invokeLaterIfNeeded(new Runnable() { public void run() { if (myInfoAndProgressPanel != null) { - myInfo = myInfoAndProgressPanel.setText(s, requestor); + Pair pair = myInfoAndProgressPanel.setText(s, requestor); + myInfo = pair.first; + myRequestor = pair.second; } } }); @@ -387,6 +391,11 @@ public class IdeStatusBarImpl extends JComponent implements StatusBarEx { return myInfo; } + @Override + public String getInfoRequestor() { + return myRequestor; + } + public void addProgress(ProgressIndicatorEx indicator, TaskInfo info) { myInfoAndProgressPanel.addProgress(indicator, info); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java index d58ef3bbe5cd..fea8ed9a7443 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java @@ -16,7 +16,9 @@ package com.intellij.openapi.wm.impl.status; import com.intellij.idea.ActionsBundle; -import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.actionSystem.ActionGroup; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.TaskInfo; import com.intellij.openapi.ui.MessageType; @@ -24,6 +26,7 @@ import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.ui.popup.BalloonHandler; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.MultiValuesMap; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.CustomStatusBarWidget; @@ -49,7 +52,10 @@ import javax.swing.event.HyperlinkListener; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidget { private final ProcessPopup myPopup; @@ -330,17 +336,17 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge myRefreshAndInfoPanel.repaint(); } - public String setText(final String text, final String requestor) { + public Pair setText(final String text, final String requestor) { if (text == null || text.length() == 0) { if ((requestor != null && !requestor.equals(myCurrentRequestor)) || (myCurrentRequestor != null && !myCurrentRequestor.equals(requestor))) { - return myInfoPanel.getText(); + return Pair.create(myInfoPanel.getText(), myCurrentRequestor); } } myInfoPanel.setText(text); myCurrentRequestor = requestor; - return text; + return Pair.create(text, requestor); } public void setRefreshVisible(final boolean visible) {