diff --git a/gson/src/main/java/com/google/gson/Cache.java b/gson/src/main/java/com/google/gson/Cache.java deleted file mode 100644 index 57d710fb..00000000 --- a/gson/src/main/java/com/google/gson/Cache.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.gson; - -/** - * Defines generic cache interface. - * - * @author Inderjeet Singh - * @author Joel Leitch - */ -interface Cache { - - /** - * Adds the new value object into the cache for the given key. If the key already - * exists, then this method will override the value for the key. - * - * @param key the key identifier for the {@code value} object - * @param value the value object to store in the cache - */ - void addElement(K key, V value); - - /** - * Retrieve the cached value for the given {@code key}. - * - * @param key the key identifying the value - * @return the cached value for the given {@code key} - */ - V getElement(K key); -} diff --git a/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java b/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java new file mode 100644 index 00000000..aa253340 --- /dev/null +++ b/gson/src/main/java/com/google/gson/DefaultDateTypeAdapter.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.gson; + +import java.lang.reflect.Type; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +/** + * This type adapter supports three subclasses of date: Date, Timestamp, and + * java.sql.Date. + * + * @author Inderjeet Singh + * @author Joel Leitch + */ +final class DefaultDateTypeAdapter implements JsonSerializer, JsonDeserializer { + + // TODO: migrate to streaming adapter + + private final DateFormat enUsFormat; + private final DateFormat localFormat; + private final DateFormat iso8601Format; + + DefaultDateTypeAdapter() { + this(DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.US), + DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT)); + } + + DefaultDateTypeAdapter(String datePattern) { + this(new SimpleDateFormat(datePattern, Locale.US), new SimpleDateFormat(datePattern)); + } + + DefaultDateTypeAdapter(int style) { + this(DateFormat.getDateInstance(style, Locale.US), DateFormat.getDateInstance(style)); + } + + public DefaultDateTypeAdapter(int dateStyle, int timeStyle) { + this(DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.US), + DateFormat.getDateTimeInstance(dateStyle, timeStyle)); + } + + DefaultDateTypeAdapter(DateFormat enUsFormat, DateFormat localFormat) { + this.enUsFormat = enUsFormat; + this.localFormat = localFormat; + this.iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); + this.iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + // These methods need to be synchronized since JDK DateFormat classes are not thread-safe + // See issue 162 + public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { + synchronized (localFormat) { + String dateFormatAsString = enUsFormat.format(src); + return new JsonPrimitive(dateFormatAsString); + } + } + + public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + if (!(json instanceof JsonPrimitive)) { + throw new JsonParseException("The date should be a string value"); + } + Date date = deserializeToDate(json); + if (typeOfT == Date.class) { + return date; + } else if (typeOfT == Timestamp.class) { + return new Timestamp(date.getTime()); + } else if (typeOfT == java.sql.Date.class) { + return new java.sql.Date(date.getTime()); + } else { + throw new IllegalArgumentException(getClass() + " cannot deserialize to " + typeOfT); + } + } + + private Date deserializeToDate(JsonElement json) { + synchronized (localFormat) { + try { + return localFormat.parse(json.getAsString()); + } catch (ParseException ignored) { + } + try { + return enUsFormat.parse(json.getAsString()); + } catch (ParseException ignored) { + } + try { + return iso8601Format.parse(json.getAsString()); + } catch (ParseException e) { + throw new JsonSyntaxException(json.getAsString(), e); + } + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(DefaultDateTypeAdapter.class.getSimpleName()); + sb.append('(').append(localFormat.getClass().getSimpleName()).append(')'); + return sb.toString(); + } +} diff --git a/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java b/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java deleted file mode 100644 index 3008a193..00000000 --- a/gson/src/main/java/com/google/gson/DefaultTypeAdapters.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2008 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.gson; - -import java.lang.reflect.Type; -import java.sql.Timestamp; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; - -/** - * List of all the default type adapters ({@link JsonSerializer}s, {@link JsonDeserializer}s, - * and {@link InstanceCreator}s. - * - * @author Inderjeet Singh - * @author Joel Leitch - */ -final class DefaultTypeAdapters { - /** - * This type adapter supports three subclasses of date: Date, Timestamp, and - * java.sql.Date. - */ - static final class DefaultDateTypeAdapter implements JsonSerializer, JsonDeserializer { - private final DateFormat enUsFormat; - private final DateFormat localFormat; - private final DateFormat iso8601Format; - - DefaultDateTypeAdapter() { - this(DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.US), - DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT)); - } - - DefaultDateTypeAdapter(String datePattern) { - this(new SimpleDateFormat(datePattern, Locale.US), new SimpleDateFormat(datePattern)); - } - - DefaultDateTypeAdapter(int style) { - this(DateFormat.getDateInstance(style, Locale.US), DateFormat.getDateInstance(style)); - } - - public DefaultDateTypeAdapter(int dateStyle, int timeStyle) { - this(DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.US), - DateFormat.getDateTimeInstance(dateStyle, timeStyle)); - } - - DefaultDateTypeAdapter(DateFormat enUsFormat, DateFormat localFormat) { - this.enUsFormat = enUsFormat; - this.localFormat = localFormat; - this.iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); - this.iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); - } - - // These methods need to be synchronized since JDK DateFormat classes are not thread-safe - // See issue 162 - public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { - synchronized (localFormat) { - String dateFormatAsString = enUsFormat.format(src); - return new JsonPrimitive(dateFormatAsString); - } - } - - public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - if (!(json instanceof JsonPrimitive)) { - throw new JsonParseException("The date should be a string value"); - } - Date date = deserializeToDate(json); - if (typeOfT == Date.class) { - return date; - } else if (typeOfT == Timestamp.class) { - return new Timestamp(date.getTime()); - } else if (typeOfT == java.sql.Date.class) { - return new java.sql.Date(date.getTime()); - } else { - throw new IllegalArgumentException(getClass() + " cannot deserialize to " + typeOfT); - } - } - - private Date deserializeToDate(JsonElement json) { - synchronized (localFormat) { - try { - return localFormat.parse(json.getAsString()); - } catch (ParseException ignored) { - } - try { - return enUsFormat.parse(json.getAsString()); - } catch (ParseException ignored) { - } - try { - return iso8601Format.parse(json.getAsString()); - } catch (ParseException e) { - throw new JsonSyntaxException(json.getAsString(), e); - } - } - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(DefaultDateTypeAdapter.class.getSimpleName()); - sb.append('(').append(localFormat.getClass().getSimpleName()).append(')'); - return sb.toString(); - } - } -} diff --git a/gson/src/main/java/com/google/gson/FieldAttributes.java b/gson/src/main/java/com/google/gson/FieldAttributes.java index 8b1c48e0..a4188db5 100644 --- a/gson/src/main/java/com/google/gson/FieldAttributes.java +++ b/gson/src/main/java/com/google/gson/FieldAttributes.java @@ -16,7 +16,6 @@ package com.google.gson; -import com.google.gson.internal.$Gson$Preconditions; import com.google.gson.internal.Pair; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -39,8 +38,8 @@ public final class FieldAttributes { private static final String MAX_CACHE_PROPERTY_NAME = "com.google.gson.annotation_cache_size_hint"; - private static final Cache, String>, Collection> ANNOTATION_CACHE = - new LruCache,String>, Collection>(getMaxCacheSize()); + private static final LruCache, String>, Collection> ANNOTATION_CACHE + = new LruCache,String>, Collection>(getMaxCacheSize()); private final Class declaringClazz; private final Field field; @@ -155,11 +154,11 @@ public final class FieldAttributes { public Collection getAnnotations() { if (annotations == null) { Pair, String> key = new Pair, String>(declaringClazz, name); - Collection cachedValue = ANNOTATION_CACHE.getElement(key); + Collection cachedValue = ANNOTATION_CACHE.get(key); if (cachedValue == null) { cachedValue = Collections.unmodifiableCollection( Arrays.asList(field.getAnnotations())); - ANNOTATION_CACHE.addElement(key, cachedValue); + ANNOTATION_CACHE.put(key, cachedValue); } annotations = cachedValue; } diff --git a/gson/src/main/java/com/google/gson/GsonBuilder.java b/gson/src/main/java/com/google/gson/GsonBuilder.java index fd6d61a5..1b186632 100644 --- a/gson/src/main/java/com/google/gson/GsonBuilder.java +++ b/gson/src/main/java/com/google/gson/GsonBuilder.java @@ -16,7 +16,6 @@ package com.google.gson; -import com.google.gson.DefaultTypeAdapters.DefaultDateTypeAdapter; import com.google.gson.annotations.Expose; import com.google.gson.internal.$Gson$Preconditions; import com.google.gson.internal.Primitives; diff --git a/gson/src/main/java/com/google/gson/LruCache.java b/gson/src/main/java/com/google/gson/LruCache.java index 14a5652e..7b39fbd7 100644 --- a/gson/src/main/java/com/google/gson/LruCache.java +++ b/gson/src/main/java/com/google/gson/LruCache.java @@ -21,16 +21,14 @@ import java.util.LinkedHashMap; import java.util.Map; /** - * An implementation of the {@link Cache} interface that evict objects from the cache using an - * LRU (least recently used) algorithm. Object start getting evicted from the cache once the - * {@code maxCapacity} is reached. + * A cache that evict objects from the cache using an LRU (least recently used) + * policy. Object start getting evicted from the cache once the {@code maxCapacity} + * is reached. * * @author Inderjeet Singh * @author Joel Leitch */ -final class LruCache extends LinkedHashMap implements Cache { - private static final long serialVersionUID = 1L; - +final class LruCache extends LinkedHashMap { private final int maxCapacity; public LruCache(int maxCapacity) { @@ -38,16 +36,7 @@ final class LruCache extends LinkedHashMap implements Cache { this.maxCapacity = maxCapacity; } - public synchronized void addElement(K key, V value) { - put(key, value); - } - - public synchronized V getElement(K key) { - return get(key); - } - - @Override - protected boolean removeEldestEntry(Map.Entry entry) { + @Override protected boolean removeEldestEntry(Map.Entry entry) { return size() > maxCapacity; } } diff --git a/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java b/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java index 0615a94e..1b94f3d9 100644 --- a/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/DefaultDateTypeAdapterTest.java @@ -16,7 +16,6 @@ package com.google.gson; -import com.google.gson.DefaultTypeAdapters.DefaultDateTypeAdapter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; diff --git a/gson/src/test/java/com/google/gson/JsonDeserializerExceptionWrapperTest.java b/gson/src/test/java/com/google/gson/JsonDeserializerExceptionWrapperTest.java index f2d30b08..ddea26dd 100644 --- a/gson/src/test/java/com/google/gson/JsonDeserializerExceptionWrapperTest.java +++ b/gson/src/test/java/com/google/gson/JsonDeserializerExceptionWrapperTest.java @@ -16,8 +16,6 @@ package com.google.gson; -import com.google.gson.DefaultTypeAdapters.DefaultDateTypeAdapter; - import junit.framework.TestCase; import java.lang.reflect.Type;