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()) {