diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index 1511bbb178..f868b467f0 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -111,7 +111,6 @@ public final class Gson { static final boolean DEFAULT_COMPLEX_MAP_KEYS = false; static final boolean DEFAULT_SPECIALIZE_FLOAT_VALUES = false; - private static final TypeToken NULL_KEY_SURROGATE = TypeToken.get(Object.class); private static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n"; /** @@ -440,7 +439,11 @@ private static TypeAdapter atomicLongArrayAdapter(final TypeAda */ @SuppressWarnings("unchecked") public TypeAdapter getAdapter(TypeToken type) { - TypeAdapter cached = typeTokenCache.get(type == null ? NULL_KEY_SURROGATE : type); + if (type == null) { + throw new NullPointerException("No type specified"); + } + + TypeAdapter cached = typeTokenCache.get(type); if (cached != null) { return (TypeAdapter) cached; } diff --git a/gson/src/test/java/com/google/gson/GsonTest.java b/gson/src/test/java/com/google/gson/GsonTest.java index d537f7ad5b..e67f8a3adb 100644 --- a/gson/src/test/java/com/google/gson/GsonTest.java +++ b/gson/src/test/java/com/google/gson/GsonTest.java @@ -17,6 +17,7 @@ package com.google.gson; import com.google.gson.internal.Excluder; +import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import java.io.IOException; @@ -26,6 +27,9 @@ import java.util.ArrayList; import java.util.HashMap; import junit.framework.TestCase; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; /** * Unit tests for {@link Gson}. @@ -82,4 +86,16 @@ private static final class TestTypeAdapter extends TypeAdapter { } @Override public Object read(JsonReader in) throws IOException { return null; } } + + public void testNullAdapterLookup() { + // Formalize the handling of null type tokens (previously it was partially handled, but still throwing an error) + // Note: ExpectedException cannot be used due to test suite extending TestCase + try { + new Gson().getAdapter((TypeToken) null); + assertTrue("Unreachable", false); + } + catch (NullPointerException e) { + assertEquals("No type specified", e.getMessage()); + } + } }