Use local copy of latest bndlib code for pre-release testing purposes
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1347815 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/lib/json/CollectionHandler.java b/bundleplugin/src/main/java/aQute/lib/json/CollectionHandler.java
new file mode 100644
index 0000000..3fb14ee
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/lib/json/CollectionHandler.java
@@ -0,0 +1,57 @@
+package aQute.lib.json;
+
+import java.io.*;
+import java.lang.reflect.*;
+import java.util.*;
+import java.util.concurrent.*;
+
+public class CollectionHandler extends Handler {
+ Class<?> rawClass;
+ Type componentType;
+
+ CollectionHandler(Class<?> rawClass, Type componentType) {
+ this.componentType = componentType;
+ if (rawClass.isInterface()) {
+ if (rawClass.isAssignableFrom(ArrayList.class))
+ rawClass = ArrayList.class;
+ else if (rawClass.isAssignableFrom(LinkedList.class))
+ rawClass = LinkedList.class;
+ else if (rawClass.isAssignableFrom(HashSet.class))
+ rawClass = HashSet.class;
+ else if (rawClass.isAssignableFrom(TreeSet.class))
+ rawClass = TreeSet.class;
+ else if (rawClass.isAssignableFrom(Vector.class))
+ rawClass = Vector.class;
+ else if (rawClass.isAssignableFrom(ConcurrentLinkedQueue.class))
+ rawClass = ConcurrentLinkedQueue.class;
+ else if (rawClass.isAssignableFrom(CopyOnWriteArrayList.class))
+ rawClass = CopyOnWriteArrayList.class;
+ else if (rawClass.isAssignableFrom(CopyOnWriteArraySet.class))
+ rawClass = CopyOnWriteArraySet.class;
+ else
+ throw new IllegalArgumentException("Unknown interface type for collection: "
+ + rawClass);
+ }
+ this.rawClass = rawClass;
+ }
+
+ @Override void encode(Encoder app, Object object, Map<Object, Type> visited)
+ throws IOException, Exception {
+ Collection<?> collection = (Collection<?>) object;
+
+ app.append("[");
+ String del = "";
+ for (Object o : collection) {
+ app.append(del);
+ app.encode(o, componentType, visited);
+ del = ",";
+ }
+ app.append("]");
+ }
+
+ @SuppressWarnings("unchecked") @Override Object decodeArray(Decoder r) throws Exception {
+ Collection<Object> c = (Collection<Object>) rawClass.newInstance();
+ r.codec.parseArray(c, componentType, r);
+ return c;
+ }
+}