protected Gson createGson() { return new GsonBuilder().registerTypeAdapterFactory(new CollectionTypeAdapter.Factory()).create(); }
@Override @SuppressWarnings({ "unchecked" }) public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { if (!Collection.class.isAssignableFrom(typeToken.getRawType())) return null; Type[] elementTypes = TypeUtils.getElementTypes(typeToken, Collection.class); if (elementTypes.length != 1) return null; Type elementType = elementTypes[0]; TypeAdapter<?> elementTypeAdapter; if (elementType == Object.class) elementTypeAdapter = new JsonElementTypeAdapter(gson); else elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType)); Supplier<Collection<Object>> constructor = getConstructor((Class<Collection<Object>>) typeToken.getRawType()); return (TypeAdapter<T>) create(gson, elementType, elementTypeAdapter, constructor); }
@Override @SuppressWarnings({ "unchecked" }) public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { if (!Collection.class.isAssignableFrom(typeToken.getRawType())) return null; Type[] elementTypes = TypeUtils.getElementTypes(typeToken, Collection.class); if (elementTypes.length != 1) return null; Type elementType = elementTypes[0]; TypeAdapter<?> elementTypeAdapter; if (elementType == Object.class) elementTypeAdapter = new JsonElementTypeAdapter(gson); else elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType)); Supplier<Collection<Object>> constructor = getConstructor((Class<Collection<Object>>) typeToken.getRawType()); return (TypeAdapter<T>) create(gson, elementType, elementTypeAdapter, constructor); }