1
0
mirror of https://github.com/moparisthebest/k-9 synced 2025-02-25 15:11:52 -05:00

warn if not serializable, also add basic unit test

This commit is contained in:
Art O Cathain 2014-10-11 12:37:36 +01:00
parent dd1ec5f47b
commit c6df8f1ba1
2 changed files with 25 additions and 13 deletions

View File

@ -709,21 +709,33 @@ public class Utility {
} }
public static <T> Serializable toSerializableList(List<T> list) { public static <T> Serializable toSerializableList(List<T> list) {
return list instanceof Serializable ? return isExpectedCollectionClass(Serializable.class, list) ?
(Serializable) list : (Serializable) list :
new ArrayList<T>(list); new ArrayList<T>(list);
} }
public static <T> ArrayList<T> toArrayList(List<T> list) { public static <T> ArrayList<T> toArrayList(List<T> list) {
return list instanceof ArrayList ? return isExpectedCollectionClass(ArrayList.class, list) ?
(ArrayList<T>) list : (ArrayList<T>) list :
new ArrayList<T>(list); new ArrayList<T>(list);
} }
public static <T, U> Serializable toSerializableConcurrentMap(ConcurrentMap<T, U> map) {
public static <T,U> Serializable toSerializableConcurrentMap(ConcurrentMap<T,U> list) { return isExpectedCollectionClass(ConcurrentHashMap.class, map) ?
return list instanceof ConcurrentHashMap ? (ConcurrentHashMap<T, U>) map :
(ConcurrentHashMap<T,U>) list : new ConcurrentHashMap<T, U>(map);
new ConcurrentHashMap<T,U>(list);
} }
private static boolean isExpectedCollectionClass(Class<?> expected, Object instance) {
// Objects.requireNonNull(instance); // uncomment when project moves to API level 19
if (!expected.isInstance(instance)) {
Log.w(K9.LOG_TAG, "Instance class [" + instance.getClass().getName()
+ "] would be better as [" + expected.getName()
+ "] for performance, to prevent collection copying");
return false;
} else {
return true;
}
}
} }

View File

@ -4,23 +4,23 @@ import com.fsck.k9.helper.Utility;
import junit.framework.TestCase; import junit.framework.TestCase;
import java.io.Serializable; import java.io.*;
import java.util.LinkedList; import java.util.*;
public class UtilityTest extends TestCase { public class UtilityTest extends TestCase {
public void testToSerializableList() { public void testToArrayList() {
LinkedList<String> input = new LinkedList<String>(Arrays.asList("a", "b")); LinkedList<String> input = new LinkedList<String>(Arrays.asList("a", "b"));
Serializable serializableList = Utility.toSerializableList(input); Serializable serializableList = Utility.toArrayList(input);
assertEquals(serializableList, input); assertEquals(serializableList, input);
} }
public void testToSerializableListAlreadySerializable() { public void testToArrayListAlreadyArrayList() {
ArrayList<String> input = new ArrayList<String>(Arrays.asList("a", "b")); ArrayList<String> input = new ArrayList<String>(Arrays.asList("a", "b"));
Serializable serializableList = Utility.toSerializableList(input); Serializable serializableList = Utility.toArrayList(input);
assertSame(serializableList, input); assertSame(serializableList, input);
} }