From e7c745aac8ece9bb4e6ce982a0fb0a3d1a51b3bb Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Mon, 10 Sep 2018 16:31:24 -0700 Subject: [PATCH] Make generated adapters null-safe. This is in alignment with the lookup for Java and Kotlin reflective adapters. --- .../moshi/kotlin/codgen/GeneratedAdaptersTest.kt | 7 +++++++ .../kotlin/reflect/KotlinJsonAdapterTest.kt | 16 ++++++++++++---- .../com/squareup/moshi/StandardJsonAdapters.java | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt index 0244c55..155bbdb 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt @@ -1075,6 +1075,13 @@ class GeneratedAdaptersTest { .isEqualTo(HasNullableBoolean(null)) assertThat(adapter.toJson(HasNullableBoolean(null))).isEqualTo("""{"boolean":null}""") } + + @Test fun adaptersAreNullSafe() { + val moshi = Moshi.Builder().build() + val adapter = moshi.adapter(HasNonNullConstructorParameter::class.java) + assertThat(adapter.fromJson("null")).isNull() + assertThat(adapter.toJson(null)).isEqualTo("null") + } } // Has to be outside to avoid Types seeing an owning class diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt index d1a7df3..89b21de 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/reflect/KotlinJsonAdapterTest.kt @@ -860,10 +860,11 @@ class KotlinJsonAdapterTest { val generatedAdapter = moshi.adapter(UsesGeneratedAdapter::class.java) val reflectionAdapter = moshi.adapter(UsesReflectionAdapter::class.java) - assertThat(generatedAdapter.javaClass.name) - .contains("KotlinJsonAdapterTest_UsesGeneratedAdapterJsonAdapter") - assertThat(reflectionAdapter.javaClass.name) - .doesNotContain("KotlinJsonAdapterTest_UsesReflectionAdapterJsonAdapter") + assertThat(generatedAdapter.toString()) + .isEqualTo("GeneratedJsonAdapter(KotlinJsonAdapterTest.UsesGeneratedAdapter).nullSafe()") + assertThat(reflectionAdapter.toString()) + .isEqualTo("KotlinJsonAdapter(com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterTest" + + ".UsesReflectionAdapter).nullSafe()") } @JsonClass(generateAdapter = true) @@ -913,4 +914,11 @@ class KotlinJsonAdapterTest { .isEqualTo(HasNullableBoolean(null)) assertThat(adapter.toJson(HasNullableBoolean(null))).isEqualTo("""{"boolean":null}""") } + + @Test fun adaptersAreNullSafe() { + val moshi = Moshi.Builder().build() + val adapter = moshi.adapter(HasNonNullConstructorParameter::class.java) + assertThat(adapter.fromJson("null")).isNull() + assertThat(adapter.toJson(null)).isEqualTo("null") + } } diff --git a/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java b/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java index 22befd3..5c94c89 100644 --- a/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java +++ b/moshi/src/main/java/com/squareup/moshi/StandardJsonAdapters.java @@ -59,7 +59,7 @@ final class StandardJsonAdapters { JsonClass jsonClass = rawType.getAnnotation(JsonClass.class); if (jsonClass != null && jsonClass.generateAdapter()) { - return generatedAdapter(moshi, type, rawType); + return generatedAdapter(moshi, type, rawType).nullSafe(); } if (rawType.isEnum()) {