package openmods.serializable.providers; import com.google.common.reflect.TypeToken; import java.lang.reflect.Type; import java.util.Arrays; import java.util.List; import openmods.reflection.TypeUtils; import openmods.serializable.IGenericSerializerProvider; import openmods.utils.io.IStreamSerializer; public class ListSerializerProvider implements IGenericSerializerProvider { @Override public IStreamSerializer<?> getSerializer(Type type) { TypeToken<?> typeToken = TypeToken.of(type); if (TypeUtils.LIST_TOKEN.isAssignableFrom(typeToken)) { final TypeToken<?> componentType = typeToken.resolveType(TypeUtils.LIST_VALUE_PARAM); return new NullableCollectionSerializer<List<Object>>(componentType) { @Override protected List<Object> createCollection(TypeToken<?> componentCls, int length) { return Arrays.asList(new Object[length]); } @Override protected int getLength(List<Object> collection) { return collection.size(); } @Override protected Object getElement(List<Object> collection, int index) { return collection.get(index); } @Override protected void setElement(List<Object> collection, int index, Object value) { collection.set(index, value); } }; } return null; } }