diff --git a/platform/platform-impl/src/com/intellij/notification/EventLog.java b/platform/platform-impl/src/com/intellij/notification/EventLog.java index 44c438097359..b26a137a6c9d 100644 --- a/platform/platform-impl/src/com/intellij/notification/EventLog.java +++ b/platform/platform-impl/src/com/intellij/notification/EventLog.java @@ -93,7 +93,7 @@ public class EventLog implements Notifications { return getLogModel(project).getStatusMessage(); } - public static Pair formatForLog(final Notification notification) { + public static Pair formatForLog(@NotNull final Notification notification) { boolean showLink = notification.getListener() != null; String content = notification.getContent(); String mainText = notification.getTitle(); diff --git a/platform/platform-impl/src/com/intellij/notification/LogModel.java b/platform/platform-impl/src/com/intellij/notification/LogModel.java index 3f01c6fc9588..41afab217f31 100644 --- a/platform/platform-impl/src/com/intellij/notification/LogModel.java +++ b/platform/platform-impl/src/com/intellij/notification/LogModel.java @@ -61,6 +61,8 @@ public class LogModel { void setStatusMessage(@Nullable Notification statusMessage) { synchronized (myNotifications) { + if (myStatusMessage == statusMessage) return; + myStatusMessage = statusMessage; } StatusBar.Info.set("", myProject, EventLog.LOG_REQUESTOR); @@ -78,6 +80,7 @@ public class LogModel { removeNotification(notification); } } + setStatusToImportant(); } public ArrayList getNotifications() { @@ -98,15 +101,18 @@ public class LogModel { } if (notification == getStatusMessage() && notification.isImportant()) { - ArrayList notifications = getNotifications(); - Collections.reverse(notifications); - setStatusMessage(ContainerUtil.find(notifications, new Condition() { - @Override - public boolean value(Notification notification) { - return notification.isImportant(); - } - })); + setStatusToImportant(); } } + private void setStatusToImportant() { + ArrayList notifications = getNotifications(); + Collections.reverse(notifications); + setStatusMessage(ContainerUtil.find(notifications, new Condition() { + @Override + public boolean value(Notification notification) { + return notification.isImportant(); + } + })); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java index 2edeb50d8b3c..7f3c7dd0b241 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java @@ -105,7 +105,7 @@ class StatusPanel extends JPanel { final Project project = getActiveProject(); final Notification statusMessage = EventLog.getStatusMessage(project); - myLogMode = logAllowed && StringUtil.isEmpty(nonLogText) && statusMessage != null && project != null; + myLogMode = logAllowed && StringUtil.isEmpty(nonLogText) && project != null; myShowLog.setVisible(myLogMode); @@ -113,10 +113,14 @@ class StatusPanel extends JPanel { new Runnable() { @Override public void run() { - assert statusMessage != null; - String text = EventLog.formatForLog(statusMessage).first; - if (myDirty || System.currentTimeMillis() - statusMessage.getCreationTime() >= DateFormatUtil.MINUTE) { - text += " (" + StringUtil.decapitalize(DateFormatUtil.formatPrettyDateTime(statusMessage.getCreationTime())) + ")"; + String text; + if (statusMessage != null) { + text = EventLog.formatForLog(statusMessage).first; + if (myDirty || System.currentTimeMillis() - statusMessage.getCreationTime() >= DateFormatUtil.MINUTE) { + text += " (" + StringUtil.decapitalize(DateFormatUtil.formatPrettyDateTime(statusMessage.getCreationTime())) + ")"; + } + } else { + text = ""; } myTextPanel.setText(text); myLogAlarm.addRequest(this, 30000);