@Override
protected Object newArray(Object old, int size, Schema schema) {
Class<?> collectionClass =
ReflectData.getClassProp(schema, SpecificData.CLASS_PROP);
Class<?> elementClass =
ReflectData.getClassProp(schema, SpecificData.ELEMENT_PROP);
if (collectionClass == null && elementClass == null)
return super.newArray(old, size, schema);
if (collectionClass != null && !collectionClass.isArray()) {
if (old instanceof Collection) {
((Collection<?>)old).clear();
return old;
}
if (collectionClass.isAssignableFrom(ArrayList.class))
return new ArrayList<Object>();
return SpecificData.newInstance(collectionClass, schema);
}
if (elementClass == null) {
elementClass = collectionClass.getComponentType();
}
if (elementClass == null) {
ReflectData data = (ReflectData)getData();
elementClass = data.getClass(schema.getElementType());
}
return Array.newInstance(elementClass, size);
}