diff --git a/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java b/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java index 2779c708..3008a193 100644 --- a/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java +++ b/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java @@ -25,8 +25,6 @@ import java.util.Date; import java.util.Locale; import java.util.TimeZone; -import com.google.gson.internal.ParameterizedTypeHandlerMap; - /** * List of all the default type adapters ({@link JsonSerializer}s, {@link JsonDeserializer}s, * and {@link InstanceCreator}s. @@ -35,38 +33,6 @@ import com.google.gson.internal.ParameterizedTypeHandlerMap; * @author Joel Leitch */ final class DefaultTypeAdapters { - - // The constants DEFAULT_SERIALIZERS, DEFAULT_DESERIALIZERS, and DEFAULT_INSTANCE_CREATORS - // must be defined after the constants for the type adapters. Otherwise, the type adapter - // constants will appear as nulls. - static final ParameterizedTypeHandlerMap> DEFAULT_SERIALIZERS = - createDefaultSerializers(); - static final ParameterizedTypeHandlerMap> DEFAULT_DESERIALIZERS = - createDefaultDeserializers(); - static final ParameterizedTypeHandlerMap> DEFAULT_INSTANCE_CREATORS = - createDefaultInstanceCreators(); - - private static ParameterizedTypeHandlerMap> createDefaultSerializers() { - ParameterizedTypeHandlerMap> map = - new ParameterizedTypeHandlerMap>(); - map.makeUnmodifiable(); - return map; - } - - private static ParameterizedTypeHandlerMap> createDefaultDeserializers() { - ParameterizedTypeHandlerMap> map = - new ParameterizedTypeHandlerMap>(); - map.makeUnmodifiable(); - return map; - } - - private static ParameterizedTypeHandlerMap> createDefaultInstanceCreators() { - ParameterizedTypeHandlerMap> map - = new ParameterizedTypeHandlerMap>(); - map.makeUnmodifiable(); - return map; - } - /** * This type adapter supports three subclasses of date: Date, Timestamp, and * java.sql.Date. diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index cbec4b71..4b6d2654 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -99,9 +99,9 @@ import java.util.Map; * @author Joel Leitch */ public final class Gson { - - //TODO(inder): get rid of all the registerXXX methods and take all such parameters in the - // constructor instead. At the minimum, mark those methods private. + @SuppressWarnings("unchecked") + static final ParameterizedTypeHandlerMap EMPTY_MAP = + new ParameterizedTypeHandlerMap().makeUnmodifiable(); static final boolean DEFAULT_JSON_NON_EXECUTABLE = false; @@ -170,11 +170,10 @@ public final class Gson { * {@link GsonBuilder#excludeFieldsWithModifiers(int...)}. * */ + @SuppressWarnings("unchecked") public Gson() { this(DEFAULT_EXCLUSION_STRATEGY, DEFAULT_EXCLUSION_STRATEGY, DEFAULT_NAMING_POLICY, - DefaultTypeAdapters.DEFAULT_INSTANCE_CREATORS, - false, DefaultTypeAdapters.DEFAULT_SERIALIZERS, - DefaultTypeAdapters.DEFAULT_DESERIALIZERS, false, DEFAULT_JSON_NON_EXECUTABLE, true, + EMPTY_MAP, false, EMPTY_MAP, EMPTY_MAP, false, DEFAULT_JSON_NON_EXECUTABLE, true, false, false, LongSerializationPolicy.DEFAULT, Collections.emptyList()); } diff --git a/gson/src/main/java/com/google/gson/GsonBuilder.java b/gson/src/main/java/com/google/gson/GsonBuilder.java index 98a60411..096cfc2a 100644 --- a/gson/src/main/java/com/google/gson/GsonBuilder.java +++ b/gson/src/main/java/com/google/gson/GsonBuilder.java @@ -677,24 +677,13 @@ public final class GsonBuilder { deserializationStrategies.add(exposeAnnotationDeserializationExclusionStrategy); serializationStrategies.add(exposeAnnotationSerializationExclusionStrategy); } - - ParameterizedTypeHandlerMap> customSerializers = serializers.copyOf(); - ParameterizedTypeHandlerMap> customDeserializers = deserializers.copyOf(); - addTypeAdaptersForDate(datePattern, dateStyle, timeStyle, customSerializers, - customDeserializers); - - ParameterizedTypeHandlerMap> customInstanceCreators = - instanceCreators.copyOf(); - - customSerializers.makeUnmodifiable(); - customDeserializers.makeUnmodifiable(); - customInstanceCreators.makeUnmodifiable(); + addTypeAdaptersForDate(datePattern, dateStyle, timeStyle, serializers, deserializers); return new Gson(new DisjunctionExclusionStrategy(deserializationStrategies), new DisjunctionExclusionStrategy(serializationStrategies), - fieldNamingPolicy, customInstanceCreators, serializeNulls, - customSerializers, customDeserializers, complexMapKeySerialization, - generateNonExecutableJson, escapeHtmlChars, prettyPrinting, + fieldNamingPolicy, instanceCreators.copyOf().makeUnmodifiable(), serializeNulls, + serializers.copyOf().makeUnmodifiable(), deserializers.copyOf().makeUnmodifiable(), + complexMapKeySerialization, generateNonExecutableJson, escapeHtmlChars, prettyPrinting, serializeSpecialFloatingPointValues, longSerializationPolicy, typeAdapterFactories); } diff --git a/gson/src/main/java/com/google/gson/internal/ParameterizedTypeHandlerMap.java b/gson/src/main/java/com/google/gson/internal/ParameterizedTypeHandlerMap.java index 0bb27447..5ff14ea1 100644 --- a/gson/src/main/java/com/google/gson/internal/ParameterizedTypeHandlerMap.java +++ b/gson/src/main/java/com/google/gson/internal/ParameterizedTypeHandlerMap.java @@ -34,6 +34,7 @@ import java.util.logging.Logger; * @param The handler that will be looked up by type */ public final class ParameterizedTypeHandlerMap { + private static final Logger logger = Logger.getLogger(ParameterizedTypeHandlerMap.class.getName()); /** @@ -158,8 +159,9 @@ public final class ParameterizedTypeHandlerMap { } } - public synchronized void makeUnmodifiable() { + public synchronized ParameterizedTypeHandlerMap makeUnmodifiable() { modifiable = false; + return this; } public synchronized T getHandlerFor(Type type, boolean systemOnly) { diff --git a/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java b/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java index 6e1cc8c3..98487314 100644 --- a/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java +++ b/gson/src/test/java/com/google/gson/FunctionWithInternalDependenciesTest.java @@ -33,15 +33,15 @@ import junit.framework.TestCase; */ public class FunctionWithInternalDependenciesTest extends TestCase { + @SuppressWarnings("unchecked") public void testAnonymousLocalClassesSerialization() throws Exception { LinkedList strategies = new LinkedList(); strategies.add(new SyntheticFieldExclusionStrategy(true)); strategies.add(new ModifierBasedExclusionStrategy(Modifier.TRANSIENT, Modifier.STATIC)); ExclusionStrategy exclusionStrategy = new DisjunctionExclusionStrategy(strategies); Gson gson = new Gson(exclusionStrategy, exclusionStrategy, Gson.DEFAULT_NAMING_POLICY, - DefaultTypeAdapters.DEFAULT_INSTANCE_CREATORS, - false, DefaultTypeAdapters.DEFAULT_SERIALIZERS, - DefaultTypeAdapters.DEFAULT_DESERIALIZERS, false, Gson.DEFAULT_JSON_NON_EXECUTABLE, + Gson.EMPTY_MAP, false, Gson.EMPTY_MAP, Gson.EMPTY_MAP, false, + Gson.DEFAULT_JSON_NON_EXECUTABLE, true, false, false, LongSerializationPolicy.DEFAULT, Collections.emptyList()); assertEquals("{}", gson.toJson(new ClassWithNoFields() {