Class<?> raw = type.getRawClass();
// ImmutableXxx types?
if (ImmutableCollection.class.isAssignableFrom(raw)) {
if (ImmutableList.class.isAssignableFrom(raw)) {
return new ImmutableListDeserializer(type,
elementTypeDeserializer, elementDeserializer);
}
if (ImmutableMultiset.class.isAssignableFrom(raw)) {
// 15-May-2012, pgelinas: There is no ImmutableSortedMultiset
// available yet
return new ImmutableMultisetDeserializer(type, elementTypeDeserializer, elementDeserializer);
}
if (ImmutableSet.class.isAssignableFrom(raw)) {
// sorted one?
if (ImmutableSortedSet.class.isAssignableFrom(raw)) {
/* 28-Nov-2010, tatu: With some more work would be able to use other things
* than natural ordering; but that'll have to do for now...
*/
Class<?> elemType = type.getContentType().getRawClass();
if (!Comparable.class.isAssignableFrom(elemType)) {
throw new IllegalArgumentException("Can not handle ImmutableSortedSet with elements that are not Comparable<?> ("
+raw.getName()+")");
}
return new ImmutableSortedSetDeserializer(type,
elementTypeDeserializer, elementDeserializer);
}
// nah, just regular one
return new ImmutableSetDeserializer(type,
elementTypeDeserializer, elementDeserializer);
}
// TODO: make configurable (for now just default blindly to a list)
return new ImmutableListDeserializer(type, elementTypeDeserializer, elementDeserializer);
}
// Multi-xxx collections?
if (Multiset.class.isAssignableFrom(raw)) {
// Quite a few variations...