diff --git a/moshi/src/main/java/com/squareup/moshi/JsonAdapter.java b/moshi/src/main/java/com/squareup/moshi/JsonAdapter.java index 9143b16..a35fc96 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonAdapter.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonAdapter.java @@ -130,6 +130,9 @@ public abstract class JsonAdapter { * nulls. */ @CheckReturnValue public final JsonAdapter nullSafe() { + if (this instanceof NullSafeJsonAdapter) { + return this; + } return new NullSafeJsonAdapter<>(this); } @@ -141,6 +144,9 @@ public abstract class JsonAdapter { * handled elsewhere. This should only be used to fail on explicit nulls. */ @CheckReturnValue public final JsonAdapter nonNull() { + if (this instanceof NonNullJsonAdapter) { + return this; + } return new NonNullJsonAdapter<>(this); } diff --git a/moshi/src/test/java/com/squareup/moshi/JsonAdapterTest.java b/moshi/src/test/java/com/squareup/moshi/JsonAdapterTest.java index 590e283..2fbfa6a 100644 --- a/moshi/src/test/java/com/squareup/moshi/JsonAdapterTest.java +++ b/moshi/src/test/java/com/squareup/moshi/JsonAdapterTest.java @@ -285,4 +285,14 @@ public final class JsonAdapterTest { }.lenient().serializeNulls(); assertThat(adapter.fromJson("true true")).isEqualTo(true); } + + @Test public void nullSafeDoesntDuplicate() { + JsonAdapter adapter = new Moshi.Builder().build().adapter(Boolean.class).nullSafe(); + assertThat(adapter.nullSafe()).isSameAs(adapter); + } + + @Test public void nonNullDoesntDuplicate() { + JsonAdapter adapter = new Moshi.Builder().build().adapter(Boolean.class).nonNull(); + assertThat(adapter.nonNull()).isSameAs(adapter); + } }