Don't permit a type adapter for String to be registered.

This commit is contained in:
Jesse Wilson 2012-04-12 18:27:48 +00:00
parent 7b61e784c0
commit 3df2db1f16
2 changed files with 32 additions and 2 deletions

View File

@ -446,7 +446,7 @@ public final class GsonBuilder {
|| typeAdapter instanceof JsonDeserializer<?>
|| typeAdapter instanceof InstanceCreator<?>
|| typeAdapter instanceof TypeAdapter<?>);
if (Primitives.isPrimitive(type) || Primitives.isWrapperType(type)) {
if (Primitives.isPrimitive(type) || Primitives.isWrapperType(type) || type == String.class) {
throw new IllegalArgumentException(
"Cannot register type adapters for " + type);
}
@ -485,7 +485,7 @@ public final class GsonBuilder {
*
* @param baseType the class definition for the type adapter being registered for the base class
* or interface
* @param typeAdapter This object must implement at least one of {@link TypeAdapter},
* @param typeAdapter This object must implement at least one of {@link TypeAdapter},
* {@link JsonSerializer} or {@link JsonDeserializer} interfaces.
* @return a reference to this {@code GsonBuilder} object to fulfill the "Builder" pattern
* @since 1.7

View File

@ -16,7 +16,11 @@
package com.google.gson;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import junit.framework.TestCase;
/**
@ -25,6 +29,14 @@ import junit.framework.TestCase;
* @author Inderjeet Singh
*/
public class GsonBuilderTest extends TestCase {
private static final TypeAdapter<Object> NULL_TYPE_ADAPTER = new TypeAdapter<Object>() {
@Override public void write(JsonWriter out, Object value) {
throw new AssertionError();
}
@Override public Object read(JsonReader in) {
throw new AssertionError();
}
};
public void testCreatingMoreThanOnce() {
GsonBuilder builder = new GsonBuilder();
@ -39,6 +51,24 @@ public class GsonBuilderTest extends TestCase {
assertEquals("{\"d\":\"d\"}", gson.toJson(new HasModifiers()));
}
public void testRegisterTypeAdapterForUnsupportedType() {
Type[] types = {
byte.class,
int.class,
double.class,
Short.class,
Long.class,
String.class,
};
for (Type type : types) {
try {
new GsonBuilder().registerTypeAdapter(type, NULL_TYPE_ADAPTER);
fail(type.toString());
} catch (IllegalArgumentException e) {
}
}
}
@SuppressWarnings("unused")
static class HasModifiers {
private String a = "a";