Revision: 7043 Author: [email protected] Date: Thu Nov 19 14:22:49 2009 Log: Work around Firefox issue where hasOwnProperty(new String(key)) fails
Review by: jat http://code.google.com/p/google-web-toolkit/source/detail?r=7043 Modified: /trunk/user/src/com/google/gwt/json/client/JSONObject.java ======================================= --- /trunk/user/src/com/google/gwt/json/client/JSONObject.java Mon Nov 16 18:48:07 2009 +++ /trunk/user/src/com/google/gwt/json/client/JSONObject.java Thu Nov 19 14:22:49 2009 @@ -195,7 +195,9 @@ private native void addAllKeys(Collection<String> s) /*-{ var jsObject = [email protected]::jsObject; for (var key in jsObject) { - [email protected]::add(Ljava/lang/Object;)(key); + if (jsObject.hasOwnProperty(key)) { + [email protected]::add(Ljava/lang/Object;)(key); + } } }-*/; @@ -213,7 +215,9 @@ var jsObject = [email protected]::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 = [email protected]::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 = [email protected]::jsObject[key]; + var jsObject = [email protected]::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) /*-{ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
