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

Reply via email to