From 5c620c7e0a1f3e89dd0b42463aa4611950f282f1 Mon Sep 17 00:00:00 2001 From: Inderjeet Singh Date: Wed, 3 Aug 2011 03:05:12 +0000 Subject: [PATCH] Changed Gson behavior to reject duplicate fields in a class. --- .../gson/internal/bind/ReflectiveTypeAdapter.java | 6 +++++- .../google/gson/functional/NamingPolicyTest.java | 13 ++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapter.java index fe01a529..55855d5d 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapter.java @@ -174,7 +174,11 @@ public final class ReflectiveTypeAdapter extends TypeAdapter { Type fieldType = $Gson$Types.resolve(type.getType(), raw, field.getGenericType()); BoundField boundField = createBoundField(context, field, getFieldName(raw, field, declaredType), TypeToken.get(fieldType), serialize, deserialize); - result.put(boundField.name, boundField); + BoundField previous = result.put(boundField.name, boundField); + if (previous != null) { + throw new IllegalArgumentException(declaredType + + " declares multiple JSON fields named " + previous.name); + } } } type = TypeToken.get($Gson$Types.resolve(type.getType(), raw, raw.getGenericSuperclass())); diff --git a/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java b/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java index a7525fe2..8f0210c2 100644 --- a/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java +++ b/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java @@ -103,13 +103,12 @@ public class NamingPolicyTest extends TestCase { public void testGsonDuplicateNameUsingSerializedNameFieldNamingPolicySerialization() { Gson gson = builder.create(); - ClassWithDuplicateFields target = new ClassWithDuplicateFields(10); - String actual = gson.toJson(target); - assertEquals("{\"a\":10}", actual); - - target = new ClassWithDuplicateFields(3.0D); - actual = gson.toJson(target); - assertEquals("{\"a\":3.0}", actual); + try { + ClassWithDuplicateFields target = new ClassWithDuplicateFields(10); + gson.toJson(target); + fail(); + } catch (IllegalArgumentException expected) { + } } public void testGsonWithUpperCamelCaseSpacesPolicySerialiation() {