fixed issue 46 by adding toString() methods to Gson, serializers, deserializers, and instanceCreators, and default type adapters.

This commit is contained in:
Inderjeet Singh 2008-09-16 18:28:31 +00:00
parent 973696cbf5
commit 7da18b96e8
6 changed files with 126 additions and 0 deletions

View File

@ -191,6 +191,14 @@ final class DefaultTypeAdapters {
throw new JsonParseException(e);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(DefaultDateTypeAdapter.class.getSimpleName());
sb.append('(').append(format.getClass().getSimpleName()).append(')');
return sb.toString();
}
}
@SuppressWarnings("unchecked")
@ -218,6 +226,10 @@ final class DefaultTypeAdapters {
throw new RuntimeException(e);
}
}
@Override
public String toString() {
return EnumTypeAdapter.class.getSimpleName();
}
}
private static class UrlTypeAdapter implements JsonSerializer<URL>, JsonDeserializer<URL>,
@ -240,6 +252,10 @@ final class DefaultTypeAdapters {
throw new RuntimeException(e);
}
}
@Override
public String toString() {
return UrlTypeAdapter.class.getSimpleName();
}
}
private static class UriTypeAdapter implements JsonSerializer<URI>, JsonDeserializer<URI> {
@ -254,6 +270,10 @@ final class DefaultTypeAdapters {
throw new JsonParseException(e);
}
}
@Override
public String toString() {
return UriTypeAdapter.class.getSimpleName();
}
}
private static class LocaleTypeAdapter implements JsonSerializer<Locale>,
@ -288,6 +308,10 @@ final class DefaultTypeAdapters {
public Locale createInstance(Type type) {
return new Locale("en_US");
}
@Override
public String toString() {
return LocaleTypeAdapter.class.getSimpleName();
}
}
@SuppressWarnings("unchecked")
@ -317,6 +341,10 @@ final class DefaultTypeAdapters {
public Map createInstance(Type type) {
return new LinkedHashMap();
}
@Override
public String toString() {
return MapTypeAdapter.class.getSimpleName();
}
}
private static class BigDecimalTypeAdapter implements JsonSerializer<BigDecimal>,
@ -334,6 +362,10 @@ final class DefaultTypeAdapters {
public BigDecimal createInstance(Type type) {
return new BigDecimal(0);
}
@Override
public String toString() {
return BigDecimalTypeAdapter.class.getSimpleName();
}
}
private static class BigIntegerTypeAdapter implements JsonSerializer<BigInteger>,
@ -351,65 +383,109 @@ final class DefaultTypeAdapters {
public BigInteger createInstance(Type type) {
return new BigInteger("0");
}
@Override
public String toString() {
return BigIntegerTypeAdapter.class.getSimpleName();
}
}
private static class LongCreator implements InstanceCreator<Long> {
public Long createInstance(Type type) {
return new Long(0L);
}
@Override
public String toString() {
return LongCreator.class.getSimpleName();
}
}
private static class IntegerCreator implements InstanceCreator<Integer> {
public Integer createInstance(Type type) {
return new Integer(0);
}
@Override
public String toString() {
return IntegerCreator.class.getSimpleName();
}
}
private static class ShortCreator implements InstanceCreator<Short> {
public Short createInstance(Type type) {
return new Short((short) 0);
}
@Override
public String toString() {
return ShortCreator.class.getSimpleName();
}
}
private static class ByteCreator implements InstanceCreator<Byte> {
public Byte createInstance(Type type) {
return new Byte((byte) 0);
}
@Override
public String toString() {
return ByteCreator.class.getSimpleName();
}
}
private static class FloatCreator implements InstanceCreator<Float> {
public Float createInstance(Type type) {
return new Float(0F);
}
@Override
public String toString() {
return FloatCreator.class.getSimpleName();
}
}
private static class DoubleCreator implements InstanceCreator<Double> {
public Double createInstance(Type type) {
return new Double(0D);
}
@Override
public String toString() {
return DoubleCreator.class.getSimpleName();
}
}
private static class CharacterCreator implements InstanceCreator<Character> {
public Character createInstance(Type type) {
return new Character((char) 0);
}
@Override
public String toString() {
return CharacterCreator.class.getSimpleName();
}
}
private static class BooleanCreator implements InstanceCreator<Boolean> {
public Boolean createInstance(Type type) {
return new Boolean(false);
}
@Override
public String toString() {
return BooleanCreator.class.getSimpleName();
}
}
private static class LinkedListCreator implements InstanceCreator<LinkedList<?>> {
public LinkedList<?> createInstance(Type type) {
return new LinkedList<Object>();
}
@Override
public String toString() {
return LinkedListCreator.class.getSimpleName();
}
}
private static class TreeSetCreator implements InstanceCreator<TreeSet<?>> {
public TreeSet<?> createInstance(Type type) {
return new TreeSet<Object>();
}
@Override
public String toString() {
return TreeSetCreator.class.getSimpleName();
}
}
}

View File

@ -401,4 +401,18 @@ public final class Gson {
throw new JsonParseException(e);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("{");
sb.append("serializeNulls:").append(serializeNulls);
sb.append(",serializers:").append(serializers);
sb.append(",deserializers:").append(deserializers);
// using the name instanceCreator instead of ObjectConstructor since the users of Gson are
// more familiar with the concept of Instance Creators. Moreover, the objectConstructor is
// just a utility class around instance creators, and its toString() only displays them.
sb.append(",instanceCreators:").append(objectConstructor);
sb.append("}");
return sb.toString();
}
}

View File

@ -63,4 +63,9 @@ class JsonDeserializerExceptionWrapper<T> implements JsonDeserializer<T> {
throw new JsonParseException(errorMsg.toString(), e);
}
}
@Override
public String toString() {
return delegate.toString();
}
}

View File

@ -61,4 +61,9 @@ class JsonSerializerExceptionWrapper<T> implements JsonSerializer<T> {
throw new JsonParseException(errorMsg.toString(), e);
}
}
@Override
public String toString() {
return delegate.toString();
}
}

View File

@ -21,6 +21,7 @@ import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -106,4 +107,9 @@ final class MappedObjectConstructor implements ObjectConstructor {
}
instanceCreatorMap.register(typeOfT, creator);
}
@Override
public String toString() {
return instanceCreatorMap.toString();
}
}

View File

@ -90,4 +90,24 @@ final class ParameterizedTypeHandlerMap<T> {
public synchronized Set<Map.Entry<Type, T>> entrySet() {
return map.entrySet();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("{");
boolean first = true;
for (Map.Entry<Type, T> entry : map.entrySet()) {
if (first) {
first = false;
} else {
sb.append(',');
}
sb.append(typeToString(entry.getKey())).append(':');
sb.append(entry.getValue());
}
return sb.toString();
}
private String typeToString(Type type) {
return TypeUtils.toRawClass(type).getSimpleName();
}
}