Work around Firefox issue where hasOwnProperty(new String(key)) fails
Review by: jat
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7043 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/json/client/JSONObject.java b/user/src/com/google/gwt/json/client/JSONObject.java
index 77080a3..f191c0b 100644
--- a/user/src/com/google/gwt/json/client/JSONObject.java
+++ b/user/src/com/google/gwt/json/client/JSONObject.java
@@ -195,7 +195,9 @@
private native void addAllKeys(Collection<String> s) /*-{
var jsObject = this.@com.google.gwt.json.client.JSONObject::jsObject;
for (var key in jsObject) {
- s.@java.util.Collection::add(Ljava/lang/Object;)(key);
+ if (jsObject.hasOwnProperty(key)) {
+ s.@java.util.Collection::add(Ljava/lang/Object;)(key);
+ }
}
}-*/;
@@ -213,7 +215,9 @@
var jsObject = this.@com.google.gwt.json.client.JSONObject::jsObject;
var i = 0;
for (var key in jsObject) {
- result[i++] = key;
+ if (jsObject.hasOwnProperty(key)) {
+ result[i++] = key;
+ }
}
return result;
}-*/;
@@ -222,15 +226,26 @@
var jsObject = this.@com.google.gwt.json.client.JSONObject::jsObject;
var size = 0;
for (var key in jsObject) {
- ++size;
+ if (jsObject.hasOwnProperty(key)) {
+ ++size;
+ }
}
return size;
}-*/;
private native JSONValue get0(String key) /*-{
- var v = this.@com.google.gwt.json.client.JSONObject::jsObject[key];
+ var jsObject = this.@com.google.gwt.json.client.JSONObject::jsObject;
+ var v;
+ // In Firefox, jsObject.hasOwnProperty(key) fails when key is
+ // a String object rather than a primitive string.
+ if (jsObject.hasOwnProperty(key)
+ || ((typeof key == 'object') && (key.constructor == String)
+ && jsObject.hasOwnProperty(key.toString()))) {
+ v = jsObject[key];
+ }
var func = @com.google.gwt.json.client.JSONParser::typeMap[typeof v];
- return func ? func(v) : @com.google.gwt.json.client.JSONParser::throwUnknownTypeException(Ljava/lang/String;)(typeof v);
+ var ret = func ? func(v) : @com.google.gwt.json.client.JSONParser::throwUnknownTypeException(Ljava/lang/String;)(typeof v);
+ return ret;
}-*/;
private native void put0(String key, JSONValue value) /*-{