From 1867457030d3c149566e95a019033cce4ff3cf90 Mon Sep 17 00:00:00 2001 From: Lachlan Coote Date: Wed, 5 Aug 2015 16:27:18 -0700 Subject: [PATCH] fix #680 - make RuntimeTypeAdapterFactory null-safe --- .../RuntimeTypeAdapterFactory.java | 2 +- .../RuntimeTypeAdapterFactoryTest.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java index 1111ebc6..5bdf6e51 100644 --- a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java +++ b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java @@ -235,6 +235,6 @@ public final class RuntimeTypeAdapterFactory implements TypeAdapterFactory { } Streams.write(clone, out); } - }; + }.nullSafe(); } } diff --git a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java index a9f8ebbb..8c62bef7 100644 --- a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java +++ b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java @@ -167,6 +167,25 @@ public final class RuntimeTypeAdapterFactoryTest extends TestCase { } } + public void testSerializeWrappedNullValue() { + TypeAdapterFactory billingAdapter = RuntimeTypeAdapterFactory.of(BillingInstrument.class) + .registerSubtype(CreditCard.class) + .registerSubtype(BankTransfer.class); + Gson gson = new GsonBuilder() + .registerTypeAdapterFactory(billingAdapter) + .create(); + String serialized = gson.toJson(new BillingInstrumentWrapper(null), BillingInstrumentWrapper.class); + BillingInstrumentWrapper deserialized = gson.fromJson(serialized, BillingInstrumentWrapper.class); + assertNull(deserialized.instrument); + } + + static class BillingInstrumentWrapper { + BillingInstrument instrument; + BillingInstrumentWrapper(BillingInstrument instrument) { + this.instrument = instrument; + } + } + static class BillingInstrument { private final String ownerName; BillingInstrument(String ownerName) {