aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoel.leitch@gmail.com <joel.leitch@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae>2013-01-09 23:37:38 +0000
committerjoel.leitch@gmail.com <joel.leitch@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae>2013-01-09 23:37:38 +0000
commit8b3b867a6c425112a477aa87efa19aab01df2c54 (patch)
tree1640c8741243188be2b4394fa6217d691305f2d4
parent95e76839b706daee86b0143ac1aadf5cf697952d (diff)
downloadandroid_external_gson-8b3b867a6c425112a477aa87efa19aab01df2c54.tar.gz
android_external_gson-8b3b867a6c425112a477aa87efa19aab01df2c54.tar.bz2
android_external_gson-8b3b867a6c425112a477aa87efa19aab01df2c54.zip
Stop blowing up on a null key, but rather return that the element is not found.
git-svn-id: http://google-gson.googlecode.com/svn/trunk/gson@1220 2534bb62-2c4b-0410-85e8-b5006b95c4ae
-rw-r--r--src/main/java/com/google/gson/internal/LinkedTreeMap.java18
-rw-r--r--src/test/java/com/google/gson/internal/LinkedTreeMapTest.java18
2 files changed, 28 insertions, 8 deletions
diff --git a/src/main/java/com/google/gson/internal/LinkedTreeMap.java b/src/main/java/com/google/gson/internal/LinkedTreeMap.java
index cd2f4ca7..00672514 100644
--- a/src/main/java/com/google/gson/internal/LinkedTreeMap.java
+++ b/src/main/java/com/google/gson/internal/LinkedTreeMap.java
@@ -387,14 +387,16 @@ public class LinkedTreeMap<K extends Comparable<K>, V>
}
private TreeNode<K, V> find(K key) {
- for (TreeNode<K, V> entry = root; entry != null; ) {
- int compareVal = key.compareTo(entry.key);
- if (compareVal < 0) {
- entry = entry.left;
- } else if (compareVal > 0) {
- entry = entry.right;
- } else {
- return entry;
+ if (key != null) {
+ for (TreeNode<K, V> entry = root; entry != null; ) {
+ int compareVal = key.compareTo(entry.key);
+ if (compareVal < 0) {
+ entry = entry.left;
+ } else if (compareVal > 0) {
+ entry = entry.right;
+ } else {
+ return entry;
+ }
}
}
return null;
diff --git a/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java b/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java
index 538ee5f4..a46d2b90 100644
--- a/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java
+++ b/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java
@@ -56,6 +56,24 @@ public class LinkedTreeMapTest extends TestCase {
assertEquals(map.size(), map.entrySet().size());
}
+ public void testGetAndContainsNullKey() throws Exception {
+ LinkedTreeMap<String, Integer> map = new LinkedTreeMap<String, Integer>();
+ assertFalse(map.containsKey(null));
+ assertNull(map.get(null));
+
+ map.put("A", 1);
+ assertFalse(map.containsKey(null));
+ assertNull(map.get(null));
+ }
+
+ public void testDisallowPutForNullKeys() throws Exception {
+ LinkedTreeMap<String, Integer> map = new LinkedTreeMap<String, Integer>();
+ try {
+ map.put(null, 1);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
+
public void testSingleElement() throws Exception {
LinkedTreeMap<String, Integer> map = new LinkedTreeMap<String, Integer>();
map.put("A", 1);