From 11bc471c7aa6d53ae03ce99081f307f412067ae0 Mon Sep 17 00:00:00 2001 From: Jeff Ching <chingor@google.com> Date: Fri, 31 May 2019 15:18:05 -0700 Subject: [PATCH] Revert "Fix int type transformed as BigDecimal value when parsing as Map (#529)" This reverts commit da597e87b9d7463de4eb7da55256c648d28fe3ba. --- .../test/json/AbstractJsonFactoryTest.java | 43 +++++-------------- .../google/api/client/json/JsonParser.java | 4 -- 2 files changed, 11 insertions(+), 36 deletions(-) diff --git a/google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonFactoryTest.java b/google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonFactoryTest.java index 1f11dfd38..8bf518109 100644 --- a/google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonFactoryTest.java +++ b/google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonFactoryTest.java @@ -482,8 +482,6 @@ public static class MapOfMapType { static final String MAP_TYPE = "{\"value\":[{\"map1\":{\"k1\":1,\"k2\":2},\"map2\":{\"kk1\":3,\"kk2\":4}}]}"; - static final String BIGDECIMAL_MAP_TYPE = - "{\"value\":[{\"map1\":{\"k1\":1.14566,\"k2\":2.14},\"map2\":{\"kk1\":3.29,\"kk2\":4.69}}]}"; public void testParser_mapType() throws Exception { // parse @@ -512,35 +510,16 @@ public void testParser_hashmapForMapType() throws Exception { parser = factory.createJsonParser(MAP_TYPE); parser.nextToken(); @SuppressWarnings("unchecked") - HashMap<String, ArrayList<ArrayMap<String, ArrayMap<String, Integer>>>> result = - parser.parse(HashMap.class); - // serialize - assertEquals(MAP_TYPE, factory.toString(result)); - // check parsed result - ArrayList<ArrayMap<String, ArrayMap<String, Integer>>> value = result.get("value"); - ArrayMap<String, ArrayMap<String, Integer>> firstMap = value.get(0); - ArrayMap<String, Integer> map1 = firstMap.get("map1"); - Integer integer = map1.get("k1"); - assertEquals(1, integer.intValue()); - } - - public void testParser_hashmapForMapTypeWithBigDecimal() throws Exception { - // parse - JsonFactory factory = newFactory(); - JsonParser parser; - parser = factory.createJsonParser(BIGDECIMAL_MAP_TYPE); - parser.nextToken(); - @SuppressWarnings("unchecked") HashMap<String, ArrayList<ArrayMap<String, ArrayMap<String, BigDecimal>>>> result = parser.parse(HashMap.class); // serialize - assertEquals(BIGDECIMAL_MAP_TYPE, factory.toString(result)); + assertEquals(MAP_TYPE, factory.toString(result)); // check parsed result ArrayList<ArrayMap<String, ArrayMap<String, BigDecimal>>> value = result.get("value"); ArrayMap<String, ArrayMap<String, BigDecimal>> firstMap = value.get(0); ArrayMap<String, BigDecimal> map1 = firstMap.get("map1"); - BigDecimal bigDecimal = map1.get("k1"); - assertEquals(BigDecimal.valueOf(1.14566).setScale(5), bigDecimal); + BigDecimal integer = map1.get("k1"); + assertEquals(1, integer.intValue()); } public static class WildCardTypes { @@ -568,8 +547,8 @@ public void testParser_wildCardType() throws Exception { assertEquals(WILDCARD_TYPE, factory.toString(result)); // check parsed result Collection<?>[] simple = result.simple; - ArrayList<Integer> wildcard = (ArrayList<Integer>) simple[0]; - Integer wildcardFirstValue = wildcard.get(0); + ArrayList<BigDecimal> wildcard = (ArrayList<BigDecimal>) simple[0]; + BigDecimal wildcardFirstValue = wildcard.get(0); assertEquals(1, wildcardFirstValue.intValue()); Collection<? extends Integer>[] upper = result.upper; ArrayList<Integer> wildcardUpper = (ArrayList<Integer>) upper[0]; @@ -579,8 +558,8 @@ public void testParser_wildCardType() throws Exception { ArrayList<Integer> wildcardLower = (ArrayList<Integer>) lower[0]; Integer wildcardFirstValueLower = wildcardLower.get(0); assertEquals(1, wildcardFirstValueLower.intValue()); - Map<String, Integer> map = (Map<String, Integer>) result.map; - Integer mapValue = map.get("v"); + Map<String, BigDecimal> map = (Map<String, BigDecimal>) result.map; + BigDecimal mapValue = map.get("v"); assertEquals(1, mapValue.intValue()); Map<String, Integer> mapUpper = (Map<String, Integer>) result.mapUpper; Integer mapUpperValue = mapUpper.get("v"); @@ -792,16 +771,16 @@ public void testParser_treemapForTypeVariableType() throws Exception { ArrayList<Object> arr = (ArrayList<Object>) result.get("arr"); assertEquals(2, arr.size()); assertEquals(Data.nullOf(Object.class), arr.get(0)); - ArrayList<Integer> subArr = (ArrayList<Integer>) arr.get(1); + ArrayList<BigDecimal> subArr = (ArrayList<BigDecimal>) arr.get(1); assertEquals(2, subArr.size()); assertEquals(Data.nullOf(Object.class), subArr.get(0)); - Integer arrValue = subArr.get(1); + BigDecimal arrValue = subArr.get(1); assertEquals(1, arrValue.intValue()); // null value Object nullValue = result.get("nullValue"); assertEquals(Data.nullOf(Object.class), nullValue); // value - Integer value = (Integer) result.get("value"); + BigDecimal value = (BigDecimal) result.get("value"); assertEquals(1, value.intValue()); } @@ -1540,7 +1519,7 @@ public void testParser_heterogeneousSchema_genericJson() throws Exception { assertEquals(4, dog.numberOfLegs); assertEquals(3, ((DogGenericJson) dog).tricksKnown); assertEquals("this is not being used!", dog.get("unusedInfo")); - Integer foo = ((Integer) ((ArrayMap<String, Object>) dog.get("unused")).get("foo")); + BigDecimal foo = ((BigDecimal) ((ArrayMap<String, Object>) dog.get("unused")).get("foo")); assertEquals(200, foo.intValue()); } diff --git a/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java b/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java index 44bec3f51..75972a16c 100644 --- a/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java +++ b/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java @@ -828,10 +828,6 @@ private final Object parseValue( Preconditions.checkArgument( fieldContext == null || fieldContext.getAnnotation(JsonString.class) == null, "number type formatted as a JSON number cannot use @JsonString annotation"); - if (getCurrentToken() == JsonToken.VALUE_NUMBER_INT - && (valueClass == null || valueClass.isAssignableFrom(Integer.class))) { - return getIntValue(); - } if (valueClass == null || valueClass.isAssignableFrom(BigDecimal.class)) { return getDecimalValue(); }