From 00694e98785d681b39acee72c66eb36bbf6fd554 Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Wed, 19 Jul 2017 11:29:06 -0700 Subject: [PATCH] Fail earlier with null annotation set. --- .../main/java/com/squareup/moshi/Moshi.java | 2 ++ .../java/com/squareup/moshi/MoshiTest.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/moshi/src/main/java/com/squareup/moshi/Moshi.java b/moshi/src/main/java/com/squareup/moshi/Moshi.java index c422435..a551b7d 100644 --- a/moshi/src/main/java/com/squareup/moshi/Moshi.java +++ b/moshi/src/main/java/com/squareup/moshi/Moshi.java @@ -119,6 +119,8 @@ public final class Moshi { @SuppressWarnings("unchecked") // Factories are required to return only matching JsonAdapters. public JsonAdapter nextAdapter(JsonAdapter.Factory skipPast, Type type, Set annotations) { + if (annotations == null) throw new NullPointerException("annotations == null"); + type = Types.canonicalize(type); int skipPastIndex = factories.indexOf(skipPast); diff --git a/moshi/src/test/java/com/squareup/moshi/MoshiTest.java b/moshi/src/test/java/com/squareup/moshi/MoshiTest.java index e0055c4..33e7dbd 100644 --- a/moshi/src/test/java/com/squareup/moshi/MoshiTest.java +++ b/moshi/src/test/java/com/squareup/moshi/MoshiTest.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; import javax.crypto.KeyGenerator; import okio.Buffer; import org.junit.Test; @@ -704,6 +705,23 @@ public final class MoshiTest { @Uppercase static String uppercaseString; + @Test public void nextJsonAdapterDisallowsNullAnnotations() throws Exception { + JsonAdapter.Factory badFactory = new JsonAdapter.Factory() { + @Nullable @Override + public JsonAdapter create(Type type, Set annotations, + Moshi moshi) { + return moshi.nextAdapter(this, type, null); + } + }; + Moshi moshi = new Moshi.Builder().add(badFactory).build(); + try { + moshi.adapter(Object.class); + fail(); + } catch (NullPointerException expected) { + assertThat(expected).hasMessage("annotations == null"); + } + } + @Test public void delegatingJsonAdapterFactory() throws Exception { Moshi moshi = new Moshi.Builder() .add(new UppercaseAdapterFactory())