Bug 363395 - Firebug console messages do not appear in Eclipse any longer
diff --git a/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/CFThrowable.java b/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/CFThrowable.java
index a91b140..16174f8 100644
--- a/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/CFThrowable.java
+++ b/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/CFThrowable.java
@@ -34,7 +34,22 @@
*/
public CFThrowable(Map json) {
super();
- frame = (Map) json.get(Attributes.FRAME);
+ if(json != null) {
+ frame = (Map) json.get(Attributes.FRAME);
+ if(frame != null) {
+ processFrame();
+ }
+ else {
+ Map map = (Map) json.get(Attributes.STACKTRACE);
+ if(map != null) {
+ //TODO process any frame infos we get
+ }
+ }
+ error = (Map) json.get(Attributes.ERROR);
+ }
+ }
+
+ void processFrame() {
if(frame != null) {
objects = new HashMap(frame.size());
Map vals = (Map) frame.remove(Attributes.VALUE);
@@ -63,9 +78,8 @@
objects.put(Attributes.THIS_VALUE, new CFObject(Attributes.THIS_VALUE, (String)vals.get(Attributes.TYPE), (Number) vals.get(Attributes.HANDLE)));
}
}
- error = (Map) json.get(Attributes.ERROR);
}
-
+
/**
* Returns if the error was caused by the debugger or not
*
diff --git a/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/event/CFEventQueue.java b/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/event/CFEventQueue.java
index 616f2df..e98e36f 100644
--- a/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/event/CFEventQueue.java
+++ b/bundles/org.eclipse.wst.jsdt.debug.crossfire/src/org/eclipse/wst/jsdt/debug/internal/crossfire/event/CFEventQueue.java
@@ -13,6 +13,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
@@ -212,7 +213,7 @@
}
}
else if(CFEventPacket.ON_CONSOLE_DEBUG.equals(name)) {
- List info = (List) event.getBody().get(Attributes.DATA);
+ Map info = (Map) event.getBody().get(Attributes.VALUE);
if(info != null) {
log(IStatus.INFO, info);
}
@@ -222,17 +223,14 @@
return null;
}
else if(CFEventPacket.ON_CONSOLE_ERROR.equals(name)) {
- List info = (List) event.getBody().get(Attributes.VALUE);
- if(info != null) {
- log(IStatus.ERROR, info);
- }
+ logError(event.getBody());
if(TRACE) {
Tracing.writeString("QUEUE [event - "+CFEventPacket.ON_CONSOLE_ERROR+"] "+JSON.serialize(event)); //$NON-NLS-1$ //$NON-NLS-2$
}
return null;
}
else if(CFEventPacket.ON_CONSOLE_INFO.equals(name)) {
- List info = (List) event.getBody().get(Attributes.DATA);
+ Map info = (Map) event.getBody().get(Attributes.VALUE);
if(info != null) {
log(IStatus.INFO, info);
}
@@ -242,7 +240,7 @@
return null;
}
else if(CFEventPacket.ON_CONSOLE_LOG.equals(name)) {
- List info = (List) event.getBody().get(Attributes.DATA);
+ Map info = (Map) event.getBody().get(Attributes.VALUE);
if(info != null) {
log(IStatus.INFO, info);
}
@@ -252,7 +250,7 @@
return null;
}
else if(CFEventPacket.ON_CONSOLE_WARN.equals(name)) {
- List info = (List) event.getBody().get(Attributes.DATA);
+ Map info = (Map) event.getBody().get(Attributes.VALUE);
if(info != null) {
log(IStatus.WARNING, info);
}
@@ -262,9 +260,6 @@
return null;
}
else if(CFEventPacket.ON_ERROR.equals(name)) {
- // "QueryInterface":{"type":"function","handle":30},
- // "pc":{"type":"number","value":26},
- // "eval":{"type":"function","handle":33},
Map body = event.getBody();
if(body != null) {
Throwable thro = new CFThrowable(body);
@@ -310,24 +305,47 @@
return null;
}
+ void logError(Map info) {
+ if(info != null) {
+ MultiStatus mstatus = new MultiStatus(CrossFirePlugin.PLUGIN_ID, IStatus.ERROR, "Error message logged in Firebug console", null); //$NON-NLS-1$
+ String message = (String) info.get(Attributes.MESSAGE);
+ CFThrowable thrw = new CFThrowable((Map) info.get(Attributes.STACKTRACE));
+ if(message != null) {
+ IStatus status = new Status(IStatus.ERROR, CrossFirePlugin.PLUGIN_ID, message, thrw);
+ mstatus.add(status);
+ }
+ if(mstatus.getChildren().length > 0) {
+ CrossFirePlugin.log(mstatus);
+ }
+ }
+ }
+
/**
* Logs the entry from the queue
*
* @param kind
* @param objects
*/
- void log(int kind, List objects) {
+ void log(int kind, Map objects) {
IStatus status = null;
if(objects.size() > 1) {
- MultiStatus mstatus = new MultiStatus(CrossFirePlugin.PLUGIN_ID, kind, "Messages logged from Crossfire", null); //$NON-NLS-1$
- for (Iterator i = objects.iterator(); i.hasNext();) {
- mstatus.add(new Status(kind, CrossFirePlugin.PLUGIN_ID, i.next().toString()));
+ MultiStatus mstatus = new MultiStatus(CrossFirePlugin.PLUGIN_ID, kind, "Messages logged from Firebug console", null); //$NON-NLS-1$
+ Entry entry = null;
+ for (Iterator i = objects.entrySet().iterator(); i.hasNext();) {
+ entry = (Entry) i.next();
+ Object value = entry.getValue();
+ if(value instanceof Map) {
+ Map map = (Map) entry.getValue();
+ if(!map.containsKey(Attributes.HANDLE)) {
+ Object val = map.get(Attributes.VALUE);
+ if(val != null) {
+ mstatus.add(new Status(kind, CrossFirePlugin.PLUGIN_ID, val.toString()));
+ }
+ }
+ }
}
status = mstatus;
}
- else if(objects.size() == 1) {
- status = new Status(kind, CrossFirePlugin.PLUGIN_ID, objects.iterator().next().toString());
- }
if(status != null) {
CrossFirePlugin.log(status);
}