Propagate log colors to lower-priority ancestors.
Patch by: jat
Review by: bruce
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6592 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java b/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java
index 5efe4e8..eaa8369 100644
--- a/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java
@@ -16,6 +16,7 @@
package com.google.gwt.dev.shell.log;
import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.TreeLogger.Type;
import com.google.gwt.dev.shell.Icons;
import com.google.gwt.dev.util.log.AbstractTreeLogger;
@@ -25,6 +26,8 @@
import java.net.URL;
import java.text.NumberFormat;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.ExecutionException;
import javax.swing.Icon;
@@ -49,12 +52,26 @@
private static final Date firstLog = new Date();
private static NumberFormat minHr = NumberFormat.getIntegerInstance();
private static NumberFormat seconds = NumberFormat.getNumberInstance();
+ private static final Map<Type, Color> logColors = new HashMap<Type, Color>();
+ private static final Map<Type,Icon> logIcons = new HashMap<Type, Icon>();
static {
seconds.setMinimumFractionDigits(3);
seconds.setMaximumFractionDigits(3);
seconds.setMinimumIntegerDigits(2);
minHr.setMinimumIntegerDigits(2);
+ logColors.put(Type.ERROR, Color.RED);
+ logIcons.put(Type.ERROR, Icons.getLogItemError());
+ logColors.put(Type.WARN, WARN_COLOR);
+ logIcons.put(Type.WARN, Icons.getLogItemWarning());
+ logColors.put(Type.INFO, Color.BLACK);
+ logIcons.put(Type.INFO, Icons.getLogItemInfo());
+ logColors.put(Type.TRACE, Color.DARK_GRAY);
+ logIcons.put(Type.TRACE, Icons.getLogItemTrace());
+ logColors.put(Type.DEBUG, DEBUG_COLOR);
+ logIcons.put(Type.DEBUG, Icons.getLogItemDebug());
+ logColors.put(Type.SPAM, SPAM_COLOR);
+ logIcons.put(Type.SPAM, Icons.getLogItemSpam());
}
public final SwingTreeLogger childLogger;
@@ -75,12 +92,18 @@
public final TreeLogger.Type type;
+ /**
+ * Maintains the highest priority of any child events.
+ */
+ private Type inheritedPriority;
+
public LogEvent(SwingTreeLogger logger, boolean isBranchCommit, int index,
Type type, String message, Throwable caught, HelpInfo helpInfo) {
this.childLogger = logger;
this.isBranchCommit = isBranchCommit;
this.index = index;
this.type = type;
+ this.inheritedPriority = type;
this.message = message;
this.helpInfo = helpInfo;
this.timestamp = new Date();
@@ -133,35 +156,22 @@
return sb.toString();
}
+ public Type getInheritedPriority() {
+ return inheritedPriority;
+ }
+
/**
* Set the properties of a label to match this log entry.
*
* @param treeLabel label to set properties for.
*/
public void setDisplayProperties(JLabel treeLabel) {
- Icon image = null;
- if (type == TreeLogger.ERROR) {
- treeLabel.setForeground(Color.RED);
- image = Icons.getLogItemError();
- } else if (type == TreeLogger.WARN) {
- treeLabel.setForeground(WARN_COLOR);
- image = Icons.getLogItemWarning();
- } else if (type == TreeLogger.INFO) {
- treeLabel.setForeground(Color.BLACK);
- image = Icons.getLogItemInfo();
- } else if (type == TreeLogger.TRACE) {
- treeLabel.setForeground(Color.DARK_GRAY);
- image = Icons.getLogItemTrace();
- } else if (type == TreeLogger.DEBUG) {
- treeLabel.setForeground(DEBUG_COLOR);
- image = Icons.getLogItemDebug();
- } else if (type == TreeLogger.SPAM) {
- treeLabel.setForeground(SPAM_COLOR);
- image = Icons.getLogItemSpam();
- } else {
- // Messages without icons, ie ALL
- treeLabel.setForeground(Color.BLACK);
+ Icon image = logIcons.get(type);
+ Color color = logColors.get(inheritedPriority);
+ if (color == null) {
+ color = Color.BLACK;
}
+ treeLabel.setForeground(color);
treeLabel.setIcon(image);
StringBuffer sb = new StringBuffer();
@@ -200,6 +210,21 @@
return s;
}
+ /**
+ * Update this log event's inherited priority, which is the highest priority
+ * of this event and any child events.
+ *
+ * @param inheritedPriority
+ * @return true if the priority was upgraded
+ */
+ public boolean updateInheritedPriority(Type inheritedPriority) {
+ if (this.inheritedPriority.isLowerPriorityThan(inheritedPriority)) {
+ this.inheritedPriority = inheritedPriority;
+ return true;
+ }
+ return false;
+ }
+
private void formatTimestamp(long ts, StringBuffer sb) {
sb.append(minHr.format(ts / (1000 * 60 * 60)));
sb.append(':');
@@ -293,6 +318,15 @@
if (event.type.needsAttention()) {
panel.tree.makeVisible(new TreePath(node.getPath()));
}
+ // Propagate our priority to our ancestors
+ Type priority = event.getInheritedPriority();
+ while (parent != panel.treeModel.getRoot()) {
+ LogEvent parentEvent = (LogEvent) parent.getUserObject();
+ if (!parentEvent.updateInheritedPriority(priority)) {
+ break;
+ }
+ parent = (DefaultMutableTreeNode) parent.getParent();
+ }
} catch (InterruptedException e) {
// TODO(jat): Auto-generated catch block
e.printStackTrace();